java - 捕获组中的可选子字符串

标签 java regex

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

\(\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/

相关文章:

java - 知道为什么我无法为我的 SavingsAccount 分配唯一的号码吗?

java - 使用 Lollipop SDK 在 Android 中的工具栏/ActionBar 中选取标题?

java - 如何使用 java 运行可执行文件 portace 从位图文件生成 svg 文件

java - 正则表达式排除 [ 除非前面有\

regex - 捕获两个字母之间的文本时出现问题

java - 由于未找到 Node 命令,Git 钩子(Hook)预提交中的提交失败

java - Kafka-Streams 相当于表值函数 join 或 cross apply

javascript - 用于捕获单词的正则表达式,无论大小写

python - Python 中的 grep 等价物是什么?

ios - 使用正则表达式在不包括空格和匹配字符串的匹配字符串后提取单词或字符