一個優秀的 "非常接近 "的答案在 洗掉少于3個字符的單詞。 用DEMO來實作。 其中Regex
([a-z]{1, 2})
洗掉所有小于3個字符的單詞。
但是如何重新設定這個演示,反之亦然?洗掉所有不完全等于3個字符的詞? 我們可以通過
抓取正好等于3個字符的單詞
([a-z]{3})
但是如何告訴regex - 洗掉所有其他不等于3的詞?
所以在上面的regex演示中,應該只留下'and'這個詞
。uj5u.com熱心網友回復:
使用替代品來匹配1-2個或4個以上的字母。
(?:[a-z]{1,2}|[a-z]{4,})
uj5u.com熱心網友回復:
另一個變化是用一個否定的lookbehind來斷言左邊沒有3個字符
[a-z] (?<![a-z][a-z][a-z])
或者用跳過失敗的方法來處理3個字母a-z:
[a-z]{3}(*SKIP)(*F)|[a-z]
uj5u.com熱心網友回復:
我想也許:
(?![a-z]{3}) [a-z]
匹配:
- 一個詞的邊界。(?![a-z]{3})- 一個負數的前瞻,以避免三個字母的單詞。[a-z]- 任何1個以上的字母詞(貪婪的)我們到一個詞的邊界。
另一個技巧是使用一個捕獲組來匹配你想要的東西:
(? :[a-z]{3}|([a-z] ))
- 一個詞的邊界。
(?:[a-z]{3}|([a-z] ))- 一個嵌套的捕獲組,在交替的情況下,首先忽略三個字母,然后捕獲任何1 的單詞(貪婪)。- 一個詞的邊界。
uj5u.com熱心網友回復:
可選擇一組至少有2個字符的字母和一個占有式量詞:
[a-z]{1,2} (? :[a-z]{2,})?
這種方法是基于一個計算技巧和回溯。 換句話說。2 x = 3與x > 1沒有解決辦法。
如果我寫[a-z]{1,2}(?:[a-z]{2,})? (有無最后一個并不重要),當詞綴引擎到達一個三個字母單詞的開頭位置時,[a-z]{1,2}會消耗掉前兩個字母,但是由于最后一個單詞邊界需要一個額外的字符才能成功,詞綴引擎沒有其他選擇,只能回溯{1,2}量詞。通過一個回溯步驟,[a-z]{1,2}將只消耗一個字符,(?:[a-z]{2,})?可以成功。但通過使這個量詞成為占有式,我禁止了這個回溯步驟。因為對于一個三個字母的單詞來說,[a-z]{1,2} 需要2個字符,而[a-z]{2,}至少需要2個字母,所以該模式失敗。
使用詞的邊界,并強制使用占有式量詞來失敗:
(?:[a-z]{3})? [a-z]
這個也是在玩一個不可能的斷言。三個字母后面是一個詞的邊界,后面不可能是一個字母。
再來一次,對于一個三個字母的單詞,一旦三個字母被[a-z]{3}消耗,占有式量詞? 禁止回溯,[a-z] 使該模式失敗。
用3個字母強制失敗,用回溯控制動詞跳過:
[a-z]{3}(*SKIP)^|[a-z]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/306675.html
標籤:
上一篇:試圖重定向到另一個頁面
