RegExp 捕获文字

RegExp Capture literals

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

这是它应该能够处理的,如果这应该正确地完成的话

"text"
"\"text\""
"\"
"\"\\""

所以在我看来,它需要处理转义字符数量均匀的情况和数量不均匀的情况。但是你如何把它变成正则表达式呢?

更新

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

中的任何内容

"/\"[^\"]*\"/"

除非有嵌套引号“\"data\"”,否则这将起作用。

"/\"(\\\"|[^\"])*\"/"

除非有“\\”

,否则这将起作用

这就是我需要的

$var = "...";

变成

$var = ;

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

查找:((?<!\)(?:\.)*)(["'])(?:\.|(?!).)*?
替换:</code></p> <p>请注意,如果您要在 PHP 中使用此正则表达式(将其编码为字符串文字),您需要转义该正则表达式中的反斜杠和引号,如下所示:</p> <pre><code>preg_replace("~((?<!\\)(?:\\.)*)([\"'])(?:\\.|(?!\2).)*?\2~s", "", $input);

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

eval.in

上查看 运行

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