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

时间:2015-01-30 14:24:25

标签: regex vb.net

我正在尝试编写与不在引号中的单词匹配的正则表达式代码。我用了一个展望未来,看后面试图完成但它似乎没有工作。这是我的代码

(?<!"")echo(?>!"")

我希望它只在echo不是单引号或双引号时匹配,即 匹配:

echo "i need help";

而不是:

$str = " you can use echo to print out words";
顺便说一下,使用vb.net 2012

1 个答案:

答案 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

demo

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

您可以查看与regex101 debugger匹配所需的步骤数。

相关问题