簡體   English   中英

當代碼使用 < 和 > 編碼時,正則表達式匹配除 HTML 標記之外的任何內容

[英]Regex to match anything except HTML tags when code is encoded using < and >

我正在嘗試使用正則表達式來匹配除 HTML 標簽之外的任何文本。 我為“正常” HTML 代碼找到了這個解決方案:

<[^>]*>(*SKIP)(*F)|[^<]+

但是,我的代碼是使用&lt;編碼的。 &gt; 而不是<> ,我無法修改上面的正則表達式以使其正常工作。

例如,給定文本:

Hi &lt;p class=\"hello\"&gt;\r\nthere, how are you\r\n&lt;/p&gt;

我需要匹配“嗨”和“那里,你好嗎”。 請注意,在此示例中,我還需要匹配不在標簽之間的文本“hi”。

更新:因為我使用的是 ruby 的 gsub,所以看起來我什至不能使用 *SKIP 和 *F

更新 2:我試圖不詳細說明,但似乎很重要:我實際上需要替換文本中的所有空格,但不是那些作為標簽一部分的空格,無論是&lt; ... &gt; &lt; ... &gt; 標簽或<...>標簽。

您可以使用

text = text.gsub(/(&lt;.*?&gt;|<[^>]*>)|[[:blank:]]/m) { $1 || '_' }

我建議[[:blank:]]而不是\s因為我假設您不想替換換行符。 請參閱Ruby 演示

上面的正則表達式匹配

  • (&lt;.*?&gt;|<[^>]*>) - 要么&lt; , 盡可能少的任何零個或多個字符,並且&gt; < ,然后是除>之外的零個或多個字符,然后是>
  • | - 或者
  • [[:blank:]] - 任何單個水平空白(您也可以使用[\p{Zs}\t]匹配任何 Unicode 水平空白)。

{ $1 || '_' } 替換中的{ $1 || '_' }塊表示當第 1 組匹配時,按原樣返回第 1 組值,否則返回_作為水平空白的替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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