[英]RegExp Capture literals
我需要一種方法來從 PHP 文件中去除所有文字。 當字符串中沒有嵌套引號時,我當前的正則表達式解決方案工作正常。 嘗試更新它以處理轉義引號,這在大多數情況下都有效,除非字符串中有轉義字符。
這是它應該能夠處理的,如果這應該正確完成
“文本”
“\\“文本\\””
“\\”
"\\"\\\\\\""
因此,在我看來,它需要處理轉義字符數量均勻和數量不均勻的情況。 但是你怎么把它變成正則表達式呢?
更新
我想清理 PHP 文件,使它們更容易搜索和索引不同的部分,這是我正在玩的一個小項目的東西。 由於文字幾乎可以包含任何內容,因此它們也可以包含類似於某些搜索的數據。 所以我想刪除包含在“或”中的文件中的任何內容。
"/\\"[^\\"]*\\"/"
除非有嵌套的引號“\\”data\\””,否則這將起作用。
"/\\"(\\\\\\\\\\\\"|[^\\"])*\\"/"
除非有“\\\\”,否則這將起作用
這就是我需要的
$var = "...";
成為
$var = ;
您可以使用這個基於正則表達式的替換:
查找: ((?<!\\\\)(?:\\\\.)*)(["'])(?:\\\\.|(?!\\2).)*?\\2
更換: $1
請注意,如果您打算在 PHP 中使用此正則表達式(將其編碼為字符串文字),則需要在該正則表達式中轉義反斜杠和引號,如下所示:
preg_replace("~((?<!\\\\)(?:\\\\.)*)([\"'])(?:\\\\.|(?!\\2).)*?\\2~s", "$1", $input);
由於 PHP 字符串文字可以跨越多行,因此添加了s
修飾符,以便.
也匹配換行符。
查看它在eval.in 上運行
注意:您還需要考慮heredoc表示法......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.