gpt4 book ai didi

java - 无法在 Java 正则表达式中使用 '-' 字符,它在给定文本中找不到模式

转载 作者:行者123 更新时间:2023-12-02 00:44:16 25 4
gpt4 key购买 nike

这是我第一次使用正则表达式,遇到了一些问题。

我正在编写一个简单的编译器程序,现在我正在开发一个“解析”模块,该模块需要一些汇编程序行并将其拆分为多个部分。

该行的某些部分可能包含以下表达式之一:

String comp = "[(0)(1)(-1)(D)(A)(!D)(!A)(-D)(-A)(D+1)(A+1)(D-1)(A-1)(D+A)(D-A)(A-D)(D&A)(D|A)(M)(M+1)(M-1)(D+M)(D-M)(M-D)(D&M)(D|M)]";

所以现在我只想看看哪个表达式与下面的正则表达式匹配,因为这就是我现在需要的。

Java 编译器不会编译这样的表达式并写道:

Illegal character range near index 46 [(0)(1)(-1)(D)(A)(!D)(!A)(-D)(-A)(D+1)(A+1)(D-1)(A-1)(D+A)(D-A)(A-D)(D&A)(D|A)(M)(M+1)(M-1)(D+M)(D-M)(M-D)(D&M)(D|M)]

我尝试这样做:

    String comp = "[(0)(1)(\\-1)(D)(A)(!D)(!A)(\\-D)(\\-A)(D+1)(A+1)(D\\-1)(A\\-1)(D+A)(D\\-A)(A-D)(D&A)(D|A)(M)(M+1)(M\\-1)(D+M)(D\\-M)(M\\-D)(D&M)(D|M)]";

这使得程序可以编译,但它找到了“D”或“1”等字符串的匹配项,但找不到“D+1”或“D-1”的匹配项,问题是什么以及如何修复它?

最佳答案

当您将正则表达式(的一部分)括在方括号中时,它就成为字符集(或字符类)。一个字符集总是只匹配一个字符。所以你的正则表达式:

[(0)(1)(-1)(D)(A)(!D)(!A)(-D)(-A)(D+1)(A+1)(D-1)(A-1)(D+A)(D-A)(A-D)(D&A)(D|A)(M)(M+1)(M-1)(D+M)(D-M)(M-D)(D&M)(D|M)]

仅匹配以下之一:

'(', '0', ')', '1', '-', ... , '+', ...

另请注意,像 (, )+ 这样的元字符在字符集中没有特殊含义。字符集有自己的元字符,例如 -,用于表示范围。例如,[a-c] 匹配 abc

这就是为什么你不能在正则表达式中使用 - ,当然,它不应该是字符集。

有关字符集的更多信息:http://www.regular-expressions.info/charclass.html

关于java - 无法在 Java 正则表达式中使用 '-' 字符,它在给定文本中找不到模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com