我正在尋找一個正則運算式,它匹配開頭包含 'B'、'R'、'A' 和 'S'(以任何順序)的任何行。它將匹配以下所有行,除了最后兩行。
BRASIL
BSRAIL
BARSILERO
BRASILERA
BRASILE?A
BRASILE?O
BARBADOS
BOSNIA AND HERZEGOVINA
我嘗試了以下方法:
^(B|R|A|S){4}.*$
^(?=.*B)(?=.*R)(?=.*A)(?=.*S).*$
^(?=.{4})(?=.*B)(?=.*R)(?=.*A)(?=.*S).*$
^(?=.*B)(?=.*R)(?=.*A)(?=.*S){4}.*$
^(?=.*B){1}(?=.*R){1}(?=.*A){1}(?=.*S){1}.*$
uj5u.com熱心網友回復:
您可以使用
^([BRAS])(?!\1)([BRAS])(?!\1|\2)([BRAS])(?!\1|\2|\3)([BRAS])
請參閱正則運算式演示。詳情:
^- 字串的開始([BRAS])- 第 1 組:B、R、A或S(?!\1)([BRAS])-第2組:B,R,A或S而不是作為在第1組(?!\1|\2)([BRAS])- 第 3 組:B、R、A或S但與第 1 組和第 2 組不同(?!\1|\2|\3)([BRAS])-第4組:B,R,A或S而不是如在組1,2和3。
請注意,在 MySQL v.8 中使用該模式時,您需要將反斜杠加倍:
"^([BRAS])(?!\\1)([BRAS])(?!\\1|\\2)([BRAS])(?!\\1|\\2|\\3)([BRAS])"
uj5u.com熱心網友回復:
只有 24 個排列 :)
^(ABRS|BARS|RABS|ARBS|BRAS|RBAS|RBSA|BRSA|SRBA|RSBA|BSRA|SBRA|SARB|ASRB|RSAB|SRAB|ARSB|RASB|BASR|ABSR|SBAR|BSAR|ASBR|SABR)
您可以通過將兩個成對分組來縮短它:
^((AB|BA)(RS|SR)|(AR|RA)(BS|SB)|(AS|SA)(BR|RB)|(BR|RB)(AS|SA)|(BS|SB)(AR|RA)|(RS|SR)(AB|BA))
每個雙對匹配 4 個輸入,例如,(AB|BA)(RS|SR)可以匹配:
ABRS
ABSR
BARS
BASR
uj5u.com熱心網友回復:
如何使用一些前瞻和限制:
^(?=.{0,3}B)(?=.{0,3}R)(?=.{0,3}A).{0,3}S
在 regex101 上查看此演示(有關完整匹配輸出,請參閱另一個演示)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342391.html
下一篇:鑒于`showvariableslike'%version%';`的輸出,我如何確定我應該使用什么語法?[復制]
