[英]Why are these strings matching my regular expression?
我對正則表達式還是新手,我正在嘗試編寫一個匹配家庭關系的正確組合的表達式,例如曾曾祖母(縮寫為 GGgm)great = G
step = S
父親、母親、兒子等 = f, m, s, d, gm, gf
法律:應匹配: m, gf, Ggm, GGgf, Ss, SGgs
非法:不應匹配: mf, Gm, SSm, GSm
我目前的模式是:
^((m|f|d|s|gf|gm|gs|gd))|^(\S(m|f|d|s|gf|gm|gs|gd))|^(\S(G)*(gm|gs|gd|gf))|^((G)*(gf|gm|gs|gd))$
但是,這匹配了諸如mf
和Gm
之類的錯誤組合。 我怎樣才能解決這個問題?
在您的正則表達式中, \S(m|f|d|s|gf|gm|gs|gd)
匹配任何非空白字符(帶有\S
),然后匹配m
、 f
、 d
等。您可能想要匹配S
與\S
,但這不是\S
所做的。
您可以使用
^S?(g?|G*g)[mfds]$
請參閱正則表達式演示。 詳情:
^
- 字符串的開頭S?
- 一個可選的S
(g?|G*g)
- 一個可選的g
或者零個或多個G
然后是一個g
字符[mfds]
- m
, f
, d
或s
$
- 字符串結束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.