RegExp捕获文字

时间:2017-10-13 12:42:22

标签: php regex preg-replace

我需要一种方法从PHP文件中删除所有文字。当字符串中没有嵌套引号时,我当前的正则表达式解决方案正常工作。尝试更新它以处理转义引号,这在大多数情况下都有效,除非字符串中有转义转义字符。

这应该能够处理,如果这应该正确完成

  

“文本”
  “\” 文本\ “”
  “\\”
  “\”\\\“”

因此,在我看来,它需要处理存在偶数量转义字符的情况以及存在不均匀数量的情况。但是你怎么把它变成regexp?

更新

我想清理PHP文件,以便更容易搜索和索引不同的部分,这是我正在玩的小项目的东西。由于文字几乎可以包含任何内容,因此它们也可以包含与某些搜索类似的数据。所以我想删除包含在“或”的文件中的任何内容。

  

“/ \”[^ \ “] * \”/“

除非有嵌套引号“\”data \“”,否则这将有效。

  

“/ \”(\\\\\ “| [^ \”])* \ “/”

除非有“\\”

,否则这将有效

这就是我需要的

  

$ var =“...”;

成为

  

$ var =;

1 个答案:

答案 0 :(得分:1)

您可以使用此基于正则表达式的替换:

查找:((?<!\\)(?:\\.)*)(["'])(?:\\.|(?!\2).)*?\2
替换:$1

请注意,如果您要在PHP中使用此正则表达式(将其编码为字符串文字),则需要转义反斜杠并引用该正则表达式,如下所示:

preg_replace("~((?<!\\\\)(?:\\\\.)*)([\"'])(?:\\\\.|(?!\\2).)*?\\2~s", "$1", $input);

由于PHP字符串文字可以跨越多行,因此添加了s修饰符,以便.也匹配换行符。

eval.in

上查看它

注意:您还需要考虑heredoc符号......