Java Regexp检查字符串中的连续3位数字
我想要一个java正则表达式来检查字符串是否包含连续的3位数字。但问题是我的字符串可能包含unicode字符。如果字符串包含unicode字符,则应跳过unicode字符(跳过&AND#之后的4’),并进行检查。例如Java Regexp检查字符串中的连续3位数字,java,regex,Java,Regex,我想要一个java正则表达式来检查字符串是否包含连续的3位数字。但问题是我的字符串可能包含unicode字符。如果字符串包含unicode字符,则应跳过unicode字符(跳过&AND#之后的4’),并进行检查。例如 Neeraj : false Neeraj123 : true ӒNeeraj : false ӒNeeraj123 : true 123N{D : true NeerajӒ : false Neeraj&
Neeraj : false
Neeraj123 : true
ӒNeeraj : false
ӒNeeraj123 : true
123N{D : true
NeerajӒ : false
NeerajDB123 : true
Ӓ : false
您需要使用负片:
对于
String.matches(String regex)
,所有示例都返回false。@BheshGurung:是的<代码>匹配()是用于此操作的错误工具。它希望正则表达式匹配整个字符串。Neeraj询问如何在字符串中搜索不属于Unicode转义序列的三位数字。这就是find()
方法的作用。使用合适的工具来做这项工作……我没有把问题读清楚。很糟糕。在这种情况下,这是完美的+1.我想知道为什么OP还没有接受答案。:)@贝什古隆:我必须承认我自己也被这个问题弄糊涂了。标题是“查找”,内容是“检查”,所以我想你的观点是正确的。但最终,使用如此混乱的方法名称是Java的错。:)@尼拉吉:别这样。使用返回regexMatcher.find()代码>。不需要if
@pst:我不同意这是那么琐碎。您需要了解周围环境,才能提出解决方案的概念。他确实提供了一个全面的测试套件,这确实显示出了一些努力。@pst:好的,我很乐意推荐一个不需要四处查看(并且仍然可读)的正则表达式解决方案。这是解决难题的一种方法。尽管看起来很简单:)
Pattern regex = Pattern.compile(
"(?<! # Make sure there is no... \n" +
" &\\# # &#, followed by \n" +
" [0-9A-F]{0,3} # zero to three hex digits \n" +
") # right before the current position. \n" +
"\\d{3} # Only then match three digits.",
Pattern.COMMENTS);
Matcher regexMatcher = regex.matcher(subjectString);
return regexMatcher.find(); // returns True if regex matches, else False