正则表达式匹配不在双引号或单引号中的单词

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

demo

这种方式的优点是无论字符串的大小如何,它都能保持快速,并且它处理字符串中的转义引号。

您可以看到获得 regex101 debugger 匹配所需的步骤数。