我需要一种方法从PHP文件中删除所有文字。当字符串中没有嵌套引号时,我当前的正则表达式解决方案正常工作。尝试更新它以处理转义引号,这在大多数情况下都有效,除非字符串中有转义转义字符。
这应该能够处理,如果这应该正确完成
“文本”
“\” 文本\ “”
“\\”
“\”\\\“”
因此,在我看来,它需要处理存在偶数量转义字符的情况以及存在不均匀数量的情况。但是你怎么把它变成regexp?
更新
我想清理PHP文件,以便更容易搜索和索引不同的部分,这是我正在玩的小项目的东西。由于文字几乎可以包含任何内容,因此它们也可以包含与某些搜索类似的数据。所以我想删除包含在“或”的文件中的任何内容。
“/ \”[^ \ “] * \”/“
除非有嵌套引号“\”data \“”,否则这将有效。
“/ \”(\\\\\ “| [^ \”])* \ “/”
除非有“\\”
,否则这将有效这就是我需要的
$ var =“...”;
成为
$ var =;
答案 0 :(得分:1)
您可以使用此基于正则表达式的替换:
查找:((?<!\\)(?:\\.)*)(["'])(?:\\.|(?!\2).)*?\2
替换:$1
请注意,如果您要在PHP中使用此正则表达式(将其编码为字符串文字),则需要转义反斜杠并引用该正则表达式,如下所示:
preg_replace("~((?<!\\\\)(?:\\\\.)*)([\"'])(?:\\\\.|(?!\\2).)*?\\2~s", "$1", $input);
由于PHP字符串文字可以跨越多行,因此添加了s
修饰符,以便.
也匹配换行符。
注意:您还需要考虑heredoc符号......