2017-10-13 103 views
-1

我需要一種方法來剝離PHP文件中的所有文字。當字符串中沒有嵌套引號時,我當前的正則表達式解決方案正常工作。嘗試更新它以處理轉義引號,這在大多數情況下都能正常工作,除非字符串中存在轉義字符。正則表達式捕獲文字

這是它應該是什麼能處理,這應該是做正確

「文本」
「\」 文本\ 「」
「\\」
「\」 \ \\「」

因此,我看到它,它需要處理的情況下,有一個均勻的轉義字符和數量不均勻的情況。但是,你怎麼把它變成正則表達式呢?

更新

我要清理PHP文件,以使它們更容易通過與指數不同的部分,東西,我跟打一個小項目進行搜索。由於文字大部分可以包含任何內容,因此它們也可以包含類似於某些搜索的數據。所以我想在包裹中的文件刪除任何 「或」。

」/ \「[^ \ 」] * \「/」

這將工作,除非有一個嵌套報價「\」數據\「」。

「/ \」(\\\\\ 「| [^ \」])* \ 「/」

這將工作,除非有 「\\」

這是我需要的

$ var =「...」;

變爲

是$ var =;

+0

對不起,不知道你的意思。你可以嘗試類似[''〜(?<!\\\\)(?:\\\\ {2})* \ K「[^」\\\\] *(?:\\\\。 [^「\\\\] *)*」〜''](https://regex101.com/r/Uj70gv/1),但它可能太脆弱了。 –

+0

你能展示每種情況下的預期輸出嗎? –

+0

更新了主題以獲取更多信息 –

回答

1

您可以使用此基於正則表達式替換:

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

請注意,如果你要使用PHP(正則表達式,你編碼它一個字符串文字),你需要避開反斜槓並在該正則表達式中引用,所以像這樣:

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

由於PHP字符串文字可以跨越多行,因此會添加s修飾符,以便.也與換行符匹配。

看到它在eval.in

NB運行:你需要考慮的heredoc標註也...

+0

好了,我嘗試了所有的例子,沒有問題,甚至沒有發生問題。謝謝。是的評論和這樣會產生問題,但文件通過php_strip_whitespace()運行。 –