我正在嘗試使用正則運算式來匹配我們有一些 X (任何字符)的模式,該模式恰好連續出現 n 次。我對正則運算式了解一點,但不知道這樣的事情。
我之前的嘗試讓我使用 (.) 作為我的 X 的捕獲組,但我無法找到一種方法來確保這恰好發生n次(不多也不少)
(編輯)為了更多的背景關系,我試圖將字串(僅包含字母 'r'、'p' 和 's')分成生成的“人類”或“機器”,我想假設任何字串具有“XrrrrX”(其中 X 是 s 或 p)或“YssssY”(其中 Y 是 r 或 p)或“ZppppZ”(其中 Z 是 s 或 r)。
一些示例是
psrsrprrsssrrrpsprprsppspsssrsrssrpprppsrpssrp
psrpsprpsrpprpsprpsprpsrpprppsrpsprsprsprppsrp
psrrrrsprsrpsrrsprrrrrprpssssrsprrpspspppprpsr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
我只想匹配在一行中最多包含 5 個任何字符并且至少出現一次 xxxxx 的字串(其中 x 是連續重復 5 次的任何字符)
uj5u.com熱心網友回復:
您需要使用對捕獲組的反向參考。這是一個示例正則運算式:
(.)\1{2}
正則運算式解釋:
(.)是一個捕獲組,可以一次捕獲任何內容\1是對您剛剛捕獲的組(單個字符)的反向參考{2}是一個量詞,它與前一個標記 (the\1) 恰好匹配兩次。
請注意,要捕獲單個字符 n 次,您必須指定{n - 1}為量詞,因為第一個匹配項已被 捕獲(.)。
uj5u.com熱心網友回復:
我相信以下應該做你所追求的:
^(?!([psr]*?([psr])\2{4})\2)(?1)(?2)*$
查看在線演示
^- 起跑線錨;(?!- 打開負前瞻;([psr]*?([psr])\2{4})\2)[psr]- 一個嵌套的第一個捕獲組,以匹配任何這些字符的另一個嵌套的第二個捕獲組的0 個(惰性)字符。緊隨其后的是對我們匹配 4 次的第二個捕獲組的反向參考。之后,我們再次匹配第二個捕獲組的內容,以避免它在我們關閉負前瞻之前發生 6 次以上;
(?1)- 匹配與第一組相同的子模式;(?2)*- 匹配與第 2 組相同的子模式 0 (貪婪)次;$- 端線錨。
我想這將是以下內容的縮寫:
^(?![psr]*?([psr])\1{5})[psr]*?([psr])\2{4}[psr]*$
uj5u.com熱心網友回復:
我假設您希望匹配以下任何字串:
'psssssp'
'sppppps'
'rsssssr'
'srrrrrs'
'prrrrrp'
'rpppppr'
(但我偷偷懷疑你真的想做其他事情,在這種情況下,請在評論中告訴我)。
這可以通過匹配一個簡單的替代來完成:
(?:psssssp|sppppps|rsssssr|srrrrrs|prrrrrp|rpppppr)
或者,您可以使用采用反向參考的正則運算式:
([psr])(?!\1)([psr])\2{4}\1
演示
第二個正則運算式具有以下組件。
([psr]) # match 'p', 's' or 'r' and save to capture group 1
(?!\1) # the next character cannot be the content of capture group 1
([psr]) # match 'p', 's' or 'r' and save to capture group 2
\2{4} # match the content of capture group 2 four times
\1 # match the content of capture group 1
(?!\1)是負前瞻。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427091.html
標籤:正则表达式
