Java RegEx 以任何形式组合模式

标签 java regex

我正在尝试匹配一些法律文档链接。我已经走了足够多的路,但我想我错过了一些东西。这是我现在的工作:

(\d( )?)?(([[a-zA-Z]\.])+?) ([0-9]+?)\b:([0-9]+?)?\b

我有一个可以匹配的基础结构:

? = 可选

number/space?/string/space/number/:/number

但现在我想选择匹配以下任意组合:

-/number
,/space/number
,/space/number/-/number

这是我最好的比赛:

(\d( )?)?(([[a-zA-Z]\.])+?) ([0-9]+?)\b:([0-9]+?)(, [0-9]+?)?(-[0-9]+?)?(, ([0-9]+?)-([0-9]+?)?)?\b

我可以匹配这个:

8 Law 84:145, 252-320

但不是这个:

8 Law 84:145, 252-320, 458, 517-665 

最佳答案

您可以使用

(\d+)\s*([a-zA-Z]+)\s+(\d+):(\d+)((?:-\d+|,\s\d+(?:-\d+)?)*)

请参阅regex demo

我添加的主要部分是 ((?:-\d+|,\s\d+(?:-\d+)?)*) ,它匹配并捕获 0 个或更多组序列:

  • -\d+ - 连字符和 1+ 位数字
  • | - 或
  • ,\s\d+(?:-\d+)? - 逗号、空格、1+ 位数字,然后是由 - 和 1+ 位数字组成的可选序列.

不要忘记在代码内的 Java 字符串文字中使用双反斜杠。

关于Java RegEx 以任何形式组合模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44077439/

相关文章:

java - 正则表达式删除引用文本内的空格

python - 使用正则表达式替换文件中的单词

java - JMS/Hornetq = 如何在不受信任的网络中确保安全?

regex - * 和 + 正则表达式的区别

javascript - jquery根据id匹配元素

java - 在 Java 中使用 iaik_jce.jar 解密 pfx 或 p12 会抛出无法解密 PrivateKey!异常(exception)

regex - 使用 grep(或任何其他像 linux cmd 工具一样的 grep)来打印与文件中特定子字符串匹配的整个单词

java - 获取一组颜色的平均值

java - 在 Java 中确定 6502 仿真中的进位和溢出标志?

java - java - 如何在不使用Activity类的情况下在java中获取android id?