我需要构建一个接受以下模式的正则表达式:
WORD1 / WORD2 / *
WORD1 / *
“word2”是可选的,它需要以“/*”。
结尾我试过这个正则表达式:
(word1)/(word2)?/\*
它匹配此输入: word1 / word2 / *
但不是这样: word1 / *
答案 0 :(得分:2)
试试这个:
word1(?:/word2)?/\*
(?: )
构造是非捕获组。后面的?
表示“前一个原子的零或一个”。因此,这匹配word1
可选地后跟/word2
,然后是最后的斜杠和星号。
(我假设你要匹配的字面星号,而不是“任何字符”中的通配符星号;如果是你想要的后者,请用\*
替换.*
。)
(如果需要,您可以将捕获论坛()
重新放回word1
和word2
。)
答案 1 :(得分:0)
您需要将第一个/
移动到以下捕获组(带括号的子表达式)中:
(word1)(/word2)?/\*
如果您想在没有word2
的情况下捕获/
,请引入其他捕获组:
(word1)(/(word2))?/\*
根据您的环境,可能有更复杂的解决方案可以避免额外的捕获组(非捕获组,环视断言)。
答案 2 :(得分:0)
我有另一个答案,我相信它更精益。
(((word)(1|2)/){1,2}\*)
更少的代码,尝试一下。