regex 如何使用正则表达式捕获字符串“word 1/word 2/*”?

cnjp1d6j  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(165)

我需要构建一个接受以下模式的正则表达式:

word1/word2/*
word1/*

字符串
word2是可选的,它需要以/*结束。
我试了这个regexp:

(word1)/(word2)?/\*


它匹配此输入:word1/word2/*
但不是这个:word1/*

ruarlubt

ruarlubt1#

试试这个:

word1(?:/word2)?/\*

字符串
(?: )结构是一个非捕获群。它后面的?表示“零个或一个前一个原子”。因此这匹配word1,后面可选地跟/word2,然后是最后一个斜杠和星号。
(我假设这是您想要匹配的文字星号,而不是“任何字符”中的星号;如果您想要后者,请将\*替换为.*
(You如果需要,可以将捕获组()放回word1word2。)

5gfr0r5j

5gfr0r5j2#

我有另一个答案,我相信它更瘦。

(((word)(1|2)/){1,2}\*)

字符串
代码更少,试试吧。

zaq34kh6

zaq34kh63#

您需要将第一个/移动到以下捕获组(带括号的子表达式):

(word1)(/word2)?/\*

字符串
如果您想捕获word2 * 而不需要前导/*,请引入一个 * 额外的 * 捕获组:

(word1)(/(word2))?/\*

备注

  • 根据您的特定环境,您可以通过非捕获组((?:...))来避免不需要的捕获组。

相关问题