[英]Regex to match anything except HTML tags when code is encoded using < and >
我正在嘗試使用正則表達式來匹配除 HTML 標簽之外的任何文本。 我為“正常” HTML 代碼找到了這個解決方案:
<[^>]*>(*SKIP)(*F)|[^<]+
但是,我的代碼是使用<
編碼的。 和>
而不是<
和>
,我無法修改上面的正則表達式以使其正常工作。
例如,給定文本:
Hi <p class=\"hello\">\r\nthere, how are you\r\n</p>
我需要匹配“嗨”和“那里,你好嗎”。 請注意,在此示例中,我還需要匹配不在標簽之間的文本“hi”。
更新:因為我使用的是 ruby 的 gsub,所以看起來我什至不能使用 *SKIP 和 *F
更新 2:我試圖不詳細說明,但似乎很重要:我實際上需要替換文本中的所有空格,但不是那些作為標簽一部分的空格,無論是< ... >
< ... >
標簽或<...>
標簽。
您可以使用
text = text.gsub(/(<.*?>|<[^>]*>)|[[:blank:]]/m) { $1 || '_' }
我建議[[:blank:]]
而不是\s
因為我假設您不想替換換行符。 請參閱Ruby 演示。
上面的正則表達式匹配
(<.*?>|<[^>]*>)
- 要么<
, 盡可能少的任何零個或多個字符,並且>
或<
,然后是除>
之外的零個或多個字符,然后是>
|
- 或者[[:blank:]]
- 任何單個水平空白(您也可以使用[\p{Zs}\t]
匹配任何 Unicode 水平空白)。 { $1 || '_' }
替換中的{ $1 || '_' }
塊表示當第 1 組匹配時,按原樣返回第 1 組值,否則返回_
作為水平空白的替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.