簡體   English   中英

正負號為負的正則表達式和點匹配換行符(/ s)

[英]Regex with negative lookahead and dot matches newline modifier (/s)

我有一個PHP腳本,我需要匹配特定字符串的最后一次出現。

假設我有以下幾種情況:

1個

<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>

2

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>

3

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>

4

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>

5

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.

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