我要實作的目標給定下面的三個字串,我試圖將 Y tf 匹配到每個字串的開頭。
15 YstfAWIN25 desired matches -> Y tf
15 YstfMSIN25 desired matches -> Y tf
15 Ystf20IN25 desired matches -> Y tf
這個正則運算式 ([ftY]) 符合我的目標,但是,它太脆弱了,并且會在對字串進行微小更改時產生錯誤的結果。例如, 15 YstfMYIN25 將導致以下匹配Y tf Y -我不想匹配第二個 Y。
因此,我嘗試使用非捕獲組來限制匹配的字符。
([ftY])(?:AW|MS|\d )
當完整字串中包含第二個 Y (15 YstfMYIN25) 時,此正則運算式產生以下匹配:
15 YstfMYIN25 desired matches -> f
捕獲組的添加使運算式跳過了 Y 和 t。我確實嘗試過讓捕獲組貪婪而非捕獲組變得懶惰,但我得到了相同的結果。有沒有辦法使用非捕獲組(或其他方式)來限制可以捕獲的字符并仍然捕獲所有感興趣的字符?僅在此示例中 Y 英尺。
我在下面有一些例子:
https://regex101.com/r/EDPqsl/1 https://regex101.com/r/R1tiXz/1
uj5u.com熱心網友回復:
您可以使用
^.*?([ftY]).*?(?!\1)([ftY]).*?(?!\1|\2)([ftY])
請參閱正則運算式演示。這三個字母將落入三個獨立的捕獲組。
詳情:
^- 字串的開始.*?- 除換行符之外的任何零個或多個字符,盡可能少([ftY])- 第 1 組:f,t或Y.*?- 除換行符之外的任何零個或多個字符,盡可能少(?!\1)([ftY])- 第 2 組:或f,但不是第 1 組中捕獲的值tY.*?- 除換行符之外的任何零個或多個字符,盡可能少(?!\1|\2)([ftY])- 第 3 組:或f,但不是第 1 組和第 2 組中捕獲的值。tY
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465826.html
標籤:正则表达式
