我已经检查了我能找到的每一篇文章,但还是没有找到。
我有一个字符串,看起来像这样:"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。
任何帮助都是感激的,谢谢!
您要使用test.find()
,而不是test.matches()
。
Matcher.matches()
要求您的模式匹配整个输入(因此您需要用.*
包围模式以使其匹配),而Matcher.find()
在输入字符串中搜索与您的模式匹配的第一个(然后是随后的)子字符串。
您可以使用向前看和OR
的组合,像这样:
input.replaceAll(".*((?=(.989|5.89|59.9|598.))....).*", "$1");
这将从任何一个数字的输入中检索字符串"5989",例如,它将找到"5989","3989"或"5949",但不找到"5181"。
如果您不关心检索匹配,只需这样做:
if (input.matches(".*(.989|5.89|59.9|598.).*")) {
// it would be true for "5989", "3989" or "5949" but not "5181"
}