我正在尝试编写与不在引号中的单词匹配的正则表达式代码。我用了一个展望未来,看后面试图完成但它似乎没有工作。这是我的代码
(?<!"")echo(?>!"")
我希望它只在echo不是单引号或双引号时匹配,即 匹配:
echo "i need help";
而不是:
$str = " you can use echo to print out words";
顺便说一下,使用vb.net 2012
答案 0 :(得分:2)
方法是在示例之前使用捕获组并匹配引用内容:
("[^"]*"|'[^']*')|\becho\b
当捕获组1为空时,您已匹配&#34; echo&#34;。
注意:可以改进引号之间内容的描述以处理转义引号。
注意2:如果你打算解析PHP代码,你也需要处理Heredoc和Nowdoc语法,因为你可以用它们定义一个字符串。
所以完整模式变为(ignoreWhiteSpaces选项):
(?=['"<])
(
# Heredoc/Nowdoc syntaxes:
<<<(['"]?)(\w+)\2 \r?\n # header
(?>.*\r?\n)*? # content
\3;?\r?\n # close the string
|
# quoted strings with escaped quotes support
"(?s)(?>[^\\"]+|\\.)*"
|
'(?s)(?>[^\\']+|\\.)*'
)
|
\becho\b
这种方式的优点是无论字符串的大小如何都能保持快速,并且它处理字符串中的转义引号。
您可以查看与regex101 debugger匹配所需的步骤数。