当前位置: 首页 > 知识库问答 >
问题:

Java正则前瞻条件

岑俊明
2023-03-14

我有一个可以工作的正则表达式,但不幸的是,它不能在Java中工作,因为Java不支持这种类型的内联修饰符。

我已经阅读了有关此主题的内容,例如:

  • Java支持条件展望
  • JavaRegex模式编译错误

我的正则表达式:

(?(?=\d{1,2}[.]\d{1,2}[.]\d{2,4})somerandomtextwhichisnotinthetext|^((($|EUR)? ?[-+]?(\d{1,8}[.,])*\d+([.,]\d+)?)|([-+]?(\d{1,8}[.,])*\d+([.,]\d+)? ?($|€|EUR)?))$)

我还尝试了查找,但它应该匹配的模式有一个可变长度,很遗憾,这是不支持的。。。

正则表达式应该匹配所有这些模式(需要完全匹配)--

  • 123.342,22
  • 123233.22
  • 232,11
  • 232.2
  • 232.2欧元

但不是这个:

  • 06.01.99

它需要用Java实现。

但我仍然没有解决办法。。。

谢谢你的帮助!!!

共有1个答案

微生自怡
2023-03-14

这里的要点是,您需要使用第一部分作为负前瞻,以向另一个模式添加异常:

^(?!\d{1,2}[.]\d{1,2}[.]\d{2,4}$)((($|EUR)? ?[-+]?(\d{1,8}[.,])*\d+([.,]\d+)?)|([-+]?(\d{1,8}[.,])*\d+([.,]\d+)? ?($|€|EUR)?))$
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

查看regex演示

因此,与其要求使用异常模式然后无法匹配假字符串,不如简单地使用有效的匹配模式并在开始时添加异常。

我还看到了($欧元) ,您可能想在此处匹配美元符号。如果我是对的,请将其替换为([$€]|欧元) 。另外,($欧元) 可能还需要替换为([$€]|欧元)

此外,考虑使用非捕获组而不是捕获组,因为您只表示对完全匹配值感兴趣。

 类似资料:
  • 我目前正在玩正则表达式,试图更好地理解它们,并且有一个我现在似乎正在努力的场景,因为我不知道这是否可以通过正则表达式来实现。 我有这样的文本字符串 该清单可能仍在进行中。我想匹配(选择)内部关键字之间的空格。因此,在第二行中,它将是和之间的空格。 和我能够匹配关键字中包含多个单词的行。将第一部分<代码>( 编辑:假设这些行之间还有一些其他文本,所以简单的< code>\b不能作为正则表达式使用。

  • 我有以下示例文本 当我应用以下正则表达式时,当我打印第一个捕获组时,我期望以下输出 但是我最终得到的是 在我看来,由于某种原因,否定的先行部分被忽略了,因此正则表达式与整个字符串匹配。 真正让我困惑的是,积极的前瞻性正如我所期望的那样工作。例如,使用在打印第一个捕获组时返回以下内容 这是有道理的,所以我真的很困惑为什么消极的前瞻性没有正常运作。

  • 我想要一个 Java 正则表达式字符串,它可以在字符串中找到所有元音,除非它们: 是第一个字符或 下划线后面的下一个字符 AREA_ID变为AR_ID LONG_NAME变成 LNG_NM 孤独的家变成了ALN 我曾经使用过http://gskinner.com/RegExr,现在我有了下面的正则表达式来替换所有元音字母,除非它是起始字符 我想不出第二部分怎么弄(忽略紧跟在下划线后面的元音)。

  • 我有一些像这样的弦 我需要创建一个正则表达式,它将在没有空格的情况下获取内的所有内容。 使用下一个模式

  • 问题内容: 我正在尝试对Elasticsearch查询进行否定前瞻,正则表达式为: 我要匹配的文本是: 归还了住宿费用,但仍存在建筑问题。喷洒化学药品会引起健康问题,并引起眼睛刺激。 我没有任何幸运。有人可以帮忙吗? ES查询: 问题答案: 您可以使用以下两种方法之一来解决此问题: 要么 带可选的(因为 默认情况下 为ON ) 它是如何工作的? 在常见的NFA正则表达式中,通常会有负面的环顾四周,

  • 我试图捕捉两个最接近的短语之间的文本,包括这些短语,但消极的展望似乎在我的情况下不起作用。 因此,这是文本文件的一部分: 我需要捕捉每一对<代码> 我的正则表达式是: