我正在尝试使用模式和匹配器逻辑来捕获Java中一行的子字符串。对于当前应用程序,我需要删除一行的子字符串。因此,我想捕获整个子字符串,该子字符串的数字不应以为其他目的保留的指定3位数字结尾。我也不能简单地从行中剥离一定数量的硬编码字符,因此需要一个正则表达式。为了简化问题,正则表达式应只捕获不以770结尾的9位数字。
这应该是结果:
233456770 --> NO HIT
454683870 --> HIT
459987579 --> HIT
我尝试了以下解决方案,剥离所有以0结尾的数字
\d{6}[^9][^9][^0]
我还尝试了一个后向搜索,这导致子字符串太长或太短,因为缺少3位数字或太多了
\d{6}(?!990)
和
\d{9}(?!990)
那么,如何使用Java模式语言检测并捕获一个不以指定的子字符串结尾的数字,同时又将整个检测到的数字(不删除所检查的最后三位数字)保留在结果子字符串中? >
答案 0 :(得分:2)
您可以使用
(?<!\d)\d{9}(?!\d)(?<!770)
请参见this demo。
详细信息
(?<!\d)
-当前位置左侧不允许有数字\d{9}
-九位数字(?!\d)
-当前位置右边不允许有数字(?<!770)
-当前位置的左侧不允许770
。Java字符串文字:
String regex = "(?<!\\d)\\d{9}(?!\\d)(?<!770)";
答案 1 :(得分:0)
如果可以的话,我会避免使用regexex,因为它们很难调试并且性能较差。
如果可以使用纯Java:
num !=null && num.length() == 9 && num.length.endsWith("770")