簡體   English   中英

RegExp 捕獲文字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM