亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP:正則表達式忽略引號內的轉義引號

PHP:正則表達式忽略引號內的轉義引號

慕碼人8056858 2019-09-24 15:47:21
在發布此內容之前,我仔細閱讀了相關問題,并且無法修改任何相關答案以使用我的方法(不擅長使用正則表達式)?;旧?,這是我現有的行:$code = preg_replace_callback( '/"(.*?)"/', array( &$this, '_getPHPString' ), $code );$code = preg_replace_callback( "#'(.*?)'#", array( &$this, '_getPHPString' ), $code );它們都匹配''和之間包含的字符串""。我需要正則表達式忽略它們之間包含的轉義引號。因此,之間的數據''將被忽略,\'而之間的數據""將被忽略\"。任何幫助將不勝感激。
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

對于大多數字符串,您需要允許轉義任何內容(而不僅僅是轉義引號)。例如,你很可能需要允許轉義字符像"\n"和"\t"當然,轉義逃逸:"\\"。


這是一個經常問到的問題,很早以前就已經解決(并優化)了。杰弗里·弗里德爾(Jeffrey Friedl)在他的經典著作《精通正則表達式》(第3版)中深入探討了這個問題(例如)。這是您要查找的正則表達式:


好:

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

版本1:工作正常,但效率不高。


更好:

"([^"\\]++|\\.)*"或"((?>[^"\\]+)|\\.)*"

版本2:如果您擁有所有格限定詞或原子組,則效率更高(請參閱:使用原子組方法的sin的正確答案)。


最好:

"[^"\\]*(?:\\.[^"\\]*)*"

版本3:效率更高。實現Friedl的“展開循環”技術。不需要所有格或原子組(即可以在Javascript和其他功能較少的正則表達式引擎中使用。)


這是PHP語法中針對雙引號和單引號子字符串的推薦正則表達式:


$re_dq = '/"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"/s';

$re_sq = "/'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'/s";


查看完整回答
反對 回復 2019-09-24
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

嘗試這樣的正則表達式:


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

(簡短)說明:


"                 # match a `"`

(                 # open group 1

  \\\\[\\\\"]     #   match either `\\` or `\"`

  |               #   OR

  [^\\\\"]        #   match any char other than `\` and `"`

)*                # close group 1, and repeat it zero or more times

"                 # match a `"`

以下代碼段:


<?php

$text = 'abc "string \\\\ \\" literal" def';

preg_match_all('/"(\\\\[\\\\"]|[^\\\\"])*"/', $text, $matches);

echo $text . "\n";

print_r($matches);

?>

生產:


abc "string \\ \" literal" def

Array

(

    [0] => Array

        (

            [0] => "string \\ \" literal"

        )


    [1] => Array

        (

            [0] => l

        )


)

正如您在Ideone上看到的那樣。


查看完整回答
反對 回復 2019-09-24
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

基于一些粗略的基準測試,這似乎與展開的循環一樣快,但是更容易閱讀和理解。首先,它不需要任何回溯。


"[^"\\]*(\\.[^"\\]*)*"


查看完整回答
反對 回復 2019-09-24
  • 3 回答
  • 0 關注
  • 869 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號