Java 正则表达式先行条件
Java Regex Lookahead Conditional
我有一个可以工作的正则表达式,但不幸的是在 Java 中没有,因为 Java 不支持这种类型的内联修饰符。
我已经读过这个话题了。 G。这里:
- Java support for conditional lookahead
我的正则表达式:
(?(?=\d{1,2}[.]\d{1,2}[.]\d{2,4})somerandomtextwhichisnotinthetext|^((($|EUR)? ?[-+]?(\d{1,8}[.,])*\d+([.,]\d+)?)|([-+]?(\d{1,8}[.,])*\d+([.,]\d+)? ?($|€|EUR)?))$)
我也尝试了 lookbehind 但它应该匹配的模式有一个可变长度,不幸的是不支持...
正则表达式应该匹配所有这个模式(需要完全匹配 --> matcher.group(0) ):
- 123.342,22
- 123,233.22
- 232,11
- 232.2
- 232.2 欧元
但不是这个:
- 06.01.99
并且需要在Java中实现。
可是我还是没有办法...
感谢您的帮助!!!
这里的要点是您需要将第一部分用作 负 前瞻以向另一个模式添加例外:
^(?!\d{1,2}[.]\d{1,2}[.]\d{2,4}$)((($|EUR)? ?[-+]?(\d{1,8}[.,])*\d+([.,]\d+)?)|([-+]?(\d{1,8}[.,])*\d+([.,]\d+)? ?($|€|EUR)?))$
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
因此,与其要求异常模式然后无法匹配假字符串,不如简单地使用有效的匹配模式并在开头添加异常。
我也看到了 ($|€|EUR)?
,您可能想在这里匹配一个美元符号。如果我是对的,请将其替换为([$€]|EUR)?
。此外,($|EUR)?
可能还需要替换为 ([$€]|EUR)?
。
此外,考虑使用 non-capturing groups 而不是捕获值,因为您说您只对完全匹配值感兴趣。
我有一个可以工作的正则表达式,但不幸的是在 Java 中没有,因为 Java 不支持这种类型的内联修饰符。
我已经读过这个话题了。 G。这里:
- Java support for conditional lookahead
我的正则表达式:
(?(?=\d{1,2}[.]\d{1,2}[.]\d{2,4})somerandomtextwhichisnotinthetext|^((($|EUR)? ?[-+]?(\d{1,8}[.,])*\d+([.,]\d+)?)|([-+]?(\d{1,8}[.,])*\d+([.,]\d+)? ?($|€|EUR)?))$)
我也尝试了 lookbehind 但它应该匹配的模式有一个可变长度,不幸的是不支持...
正则表达式应该匹配所有这个模式(需要完全匹配 --> matcher.group(0) ):
- 123.342,22
- 123,233.22
- 232,11
- 232.2
- 232.2 欧元
但不是这个:
- 06.01.99
并且需要在Java中实现。
可是我还是没有办法...
感谢您的帮助!!!
这里的要点是您需要将第一部分用作 负 前瞻以向另一个模式添加例外:
^(?!\d{1,2}[.]\d{1,2}[.]\d{2,4}$)((($|EUR)? ?[-+]?(\d{1,8}[.,])*\d+([.,]\d+)?)|([-+]?(\d{1,8}[.,])*\d+([.,]\d+)? ?($|€|EUR)?))$
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
因此,与其要求异常模式然后无法匹配假字符串,不如简单地使用有效的匹配模式并在开头添加异常。
我也看到了 ($|€|EUR)?
,您可能想在这里匹配一个美元符号。如果我是对的,请将其替换为([$€]|EUR)?
。此外,($|EUR)?
可能还需要替换为 ([$€]|EUR)?
。
此外,考虑使用 non-capturing groups 而不是捕获值,因为您说您只对完全匹配值感兴趣。