[英]Regex with negative lookahead and dot matches newline modifier (/s)
我有一個PHP腳本,我需要匹配特定字符串的最后一次出現。
假設我有以下幾種情況:
<p class="TPTexto" style="text-autospace: none; ">
<font face="Arial" size="2" color="#FF0000">Este texto não substitui o publicado no DOU de 28.9.2006.</font>
</p>
Este texto abc def
<p class="TPTexto" style="text-autospace: none; ">
<font face="Arial" size="2" color="#FF0000">Este texto não substitui o publicado no DOU de 28.9.2006.</font>
</p>
Este texto abc def
<p class="TPTexto" style="text-autospace: none; ">
<font face="Arial" size="2" color="#FF0000">Este
texto não substitui o publicado no DOU de 28.9.2006.</font>
</p>
Este texto abc def
<p class="TPTexto" style="text-autospace: none; ">
<font face="Arial" size="2" color="#FF0000">Este <font></font>
texto não substitui o publicado no DOU de 28.9.2006.</font>
</p>
Este texto abc def
<p class="TPTexto" style="text-autospace: none; ">
<font face="Arial" size="2" color="#FF0000">Este texto não substitui o publicado no DOU de 28.9.2006.</font>
</p>
我想在所有情況下都匹配Este texto não substitui o publicado
Este <font></font>\\ntexto não substitui o publicado
,在它們之間偶爾接受一些垃圾,例如Este <font></font>\\ntexto não substitui o publicado
。
因此,我使用了以下正則表達式:
/Este(?:.(?!Este))+?texto.+?n.+?o.+?substitui.+?o.+?publicado/uis
標志:
u
接受unicode字符
i
接受不敏感的內容
s
做點( .
)匹配換行符(所以我負先行的作品)
這樣,我可以根據需要匹配最后一個Este
和以下文本,對嗎? 不! s
修飾符將其殺死。
(我正在使用此PHP工具對其進行測試)
我不知道為什么在這種情況下s
修飾符會殺死它。 任何幫助將不勝感激。
我在這個項目上使用PHP的preg_match_all
。
編輯 :
注意到還不清楚:我需要第二個Este texto...
不是第一個。
您的正則表達式可以。 您可以在正則表達式之前添加以下內容:
\A.*\K
\\A
斷言輸入字符串的開頭 .*
立即匹配整個輸入字符串,然后嘗試回溯以匹配下一個模式,即Este
\\K
重置輸出到該點,以便您僅看到所需的字符串 我刪除了前瞻,並使您的正則表達式更簡單。 總而言之,我們擁有以下優勢:
\A.*\KEste.+?texto.+?n.+?o.+?substitui.+?o.+?publicado
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.