我需要构建一个接受以下模式的正则表达式:
word1/word2/* word1/*
字符串word2是可选的,它需要以/*结束。我试了这个regexp:
word2
/*
(word1)/(word2)?/\*
型它匹配此输入:word1/word2/*但不是这个:word1/*
word1/word2/*
word1/*
ruarlubt1#
试试这个:
word1(?:/word2)?/\*
字符串(?: )结构是一个非捕获群。它后面的?表示“零个或一个前一个原子”。因此这匹配word1,后面可选地跟/word2,然后是最后一个斜杠和星号。(我假设这是您想要匹配的文字星号,而不是“任何字符”中的星号;如果您想要后者,请将\*替换为.*。(You如果需要,可以将捕获组()放回word1和word2。)
(?: )
?
word1
/word2
\*
.*
()
5gfr0r5j2#
我有另一个答案,我相信它更瘦。
(((word)(1|2)/){1,2}\*)
字符串代码更少,试试吧。
zaq34kh63#
您需要将第一个/移动到以下捕获组(带括号的子表达式):
/
(word1)(/word2)?/\*
字符串如果您想捕获word2 * 而不需要前导/*,请引入一个 * 额外的 * 捕获组:
(word1)(/(word2))?/\*
型
备注:
(?:...)
3条答案
按热度按时间ruarlubt1#
试试这个:
字符串
(?: )
结构是一个非捕获群。它后面的?
表示“零个或一个前一个原子”。因此这匹配word1
,后面可选地跟/word2
,然后是最后一个斜杠和星号。(我假设这是您想要匹配的文字星号,而不是“任何字符”中的星号;如果您想要后者,请将
\*
替换为.*
。(You如果需要,可以将捕获组
()
放回word1
和word2
。)5gfr0r5j2#
我有另一个答案,我相信它更瘦。
字符串
代码更少,试试吧。
zaq34kh63#
您需要将第一个
/
移动到以下捕获组(带括号的子表达式):字符串
如果您想捕获
word2
* 而不需要前导/
*,请引入一个 * 额外的 * 捕获组:型
备注:
(?:...)
)来避免不需要的捕获组。