我有一个正则表达式,可以正确捕获字符串中的斜杠后跟数字。正则表达式的捕获组部分如下所示:
\(\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
我该如何构建它?
最佳答案
如果我理解正确的话,你想要这个:
((?:abc_)?\\d+)[?]?
?: 运算符将组转换为非捕获组。我不明白带有部分前缀的部分。如果允许正则表达式前面的任何内容,则不能拒绝某个可选前缀。您需要在模式前面有一个清晰的分隔符,例如空格以拒绝前缀。
关于java - 捕获组中的可选子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102151/