【问题标题】:How to match non-enquoted things?如何匹配未引用的东西?
【发布时间】:2013-06-30 23:35:22
【问题描述】:

我有以下 RegEx 从 PHP 文件中删除注释: %/\*.*?\*/%s

副作用是,在使用 glob 之类的 glob($basedir . '/*') 时,它会开始删除所有中间代码...

那么当正则表达式前面或后面有引号时,我如何告诉它不匹配?

【问题讨论】:

  • 使用preg_match查找“前面或后面有引号”是否占用,并将其转换为布尔值并在if-else statements中使用。读完这篇文章后,我首先想到了什么
  • 这很重要,因为您当然也可以在 cmets 中使用引号,然后事情很快就会变得棘手。这意味着任何基于正则表达式的解决方案都不是最理想的——本质上,您需要一个完整的 PHP 语言解析器并使用它来正确识别 cmets。
  • 除非在最简单的情况下,否则无法做到这一点。很可能,只有 PHP 可以解析 PHP(由于正则表达式和其他非平凡的结构)。对于 Perl,这有 been proven some time ago
  • 似乎匹配 this question

标签: php regex regex-negation


【解决方案1】:

试试这个:

%[^'"]{1}/\*.*?\*/[^'"]{1}%s

在/*之前和*/之后包括非单引号或双引号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多