假设 PHP 代码
/**
* @since 1.0.0 <--- this shouldn't be matched
* @package blah blah blah
* Version: 1.0.0 <--- this should be matched
*/
/**
* Fired during plugin activation.
*
* This class defines all code necessary to run during the plugin's activation.
*
* @since 1.0.0 <--- this shouldn't be matched
* @package blah blah
* @subpackage blah blah
* @author blah blah
*/
define( 'PLUGIN_VERSION', '1.0.0' ); // <--- this should be matched
我想匹配1.0.0
不在@since
字符串之后的出现,所以我只想匹配第二个和第三个。
此正则表达式必须在 VS.Code 中起作用,但我搜索了此模式(?<!since)(?:\s*)1\.0\.0
,但似乎不起作用。我遗漏了什么?
您可以添加另一个后视来仅回顾之前没有空格的位置:
请参阅 regex101 上的演示
这将防止后面的后向查找在空格之前成功。
如果需要,您可以捕获空格并重新插入替换字符串,如下所示。
因为不知道空格的数量,所以一种方法是对 取反
since
:然后使用捕获组,
1.0.0
可以进行匹配:^
: 表示行的开始。(?im)
: 表示不敏感和多行标志。\s*
: 表示零个或多个空格。\*
:文字*
(?!@since)
: 不包括since
。[a-z]+
:一个或多个 a 到 z 字符(也可以添加其他字符)(1\.0\.0)
: 是一个捕获组,包括1.0.0
并且可以作为$1
为了在 VS Code 环境中使用,应删除内联标志:
看起来您正在尝试执行查找替换操作。在这种情况下:
* @since 1.0.0
使用简单的正则表达式 (@since\s+(1\.0\.0)
) 进行匹配,并将其替换为唯一的字符串,例如A0P8x&2%
。1.0.0
并进行更改即可。A0P8x&2%
为* @since 1.0.0
。