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