0

我有一个正则表达式可以正确捕获字符串中后跟数字的斜线。正则表达式的捕获组部分如下所示:

\(\d)+\\??

(斜线后的一些数字直到问号,但不包括问号),并且此捕获组之前和之后的正则表达式还有更多内容。现在我还想在我的捕获组中包含一个可选的特定前缀(称之为“abc_”):

  • 必须包含整个前缀(所有四个字符)才能包含在捕获的组中
  • 如果不存在前缀,则仍会捕获捕获组的数字部分
  • 如果前缀部分存在或存在其他前缀,则字符串与正则表达式不匹配。

一些例子:

abc_12345  is captured
12345      is captured
ab_12345   fails to match the regex
abc_       fails to match the regex
abcd_      fails to match the regex

我该如何构建这个?

4

2 回答 2

3

如果我理解正确,你想要这个:

((?:abc_)?\\d+)[?]?

?: 运算符将组转换为非捕获组。我不明白带有部分前缀的部分。如果您允许正则表达式前面的任何内容,则不能拒绝某个可选前缀。您需要在模式前面有一个明确的分隔符,例如空格以拒绝前缀。

于 2012-10-27T16:55:49.913 回答
2

您的正则表达式甚至似乎不适用于您已经描述的情况。它仅捕获一位数字而不是完整数字。您的转义也是不一致的。

但是,这应该做你打算做的事情:

((?:abc_)?\\d+)\\??

您的最后一个要求,即不应匹配不同的前缀,只有在您使用正则表达式的前面部分时才能回答。(如果此捕获组前面有\w+例如,则任何前缀都会匹配,但只会捕获完整且正确的前缀)

于 2012-10-27T16:58:27.617 回答