我已经查看了我在这里可以找到的每一篇文章,但无法弄明白。
我有一个看起来像这样的字符串:“ABC1234598901AC”
我正在尝试使用正则表达式匹配字符串中的“5989”,但我希望能够匹配该字符串,即使其中一个字符不同。
为了简化,假设我在搜索字符串“59(随机字符不是8)9”。
现在这里是我的正则表达式:“59 [^ 8] 9”但是当我在Java中使用Matcher时它根本不匹配。
这是我用来测试它的代码:
Matcher test = Pattern.compile("59[^8]9").matcher("ABC1234598901AC");
if (test.matches())
{
System.out.println(test.start());
System.out.println(test.end());
}
Test.matches()永远不会评估为true。
感谢任何帮助,谢谢!
答案 0 :(得分:2)
您想使用test.find()
,而不是test.matches()
。
Matcher.matches()
要求您的模式与整个输入匹配(因此您需要使用.*
围绕模式以使其匹配),而Matcher.find()
在输入字符串中搜索与您的模式匹配的第一个(然后是后续的)子字符串。
答案 1 :(得分:1)
您可以使用前瞻和OR
的组合,如下所示:
input.replaceAll(".*((?=(.989|5.89|59.9|598.))....).*", "$1");
这将从任何输入中检索字符串“5989”,其中包含任何一个数字,例如它将找到“5989”,“3989”或“5949”而不是“5181”。< / p>
如果您不关心检索匹配,只需执行以下操作:
if (input.matches(".*(.989|5.89|59.9|598.).*")) {
// it would be true for "5989", "3989" or "5949" but not "5181"
}