Java 正则表达式非字边界和空间
我正在寻找一个单一的正则表达式,它将匹配任何句子,其中包含一个“新”字,然后是“ee”非单词边界。下面是我在非单词边界之前或之后放置的任何内容返回False的代码Java 正则表达式非字边界和空间,java,regex,Java,Regex,我正在寻找一个单一的正则表达式,它将匹配任何句子,其中包含一个“新”字,然后是“ee”非单词边界。下面是我在非单词边界之前或之后放置的任何内容返回False的代码 String sa = "this is new freeCode "; System.out.println(sa.matches(".*\\s\\bnew\\b\\sfre.*")); //True System.out.println(sa.matches(".*\\s\\Bee\\B\\s.*")); //False
String sa = "this is new freeCode ";
System.out.println(sa.matches(".*\\s\\bnew\\b\\sfre.*")); //True
System.out.println(sa.matches(".*\\s\\Bee\\B\\s.*")); //False
System.out.println(sa.matches(".*\\Bee\\B.*")); //True
你可以试试这个。看演示
这将匹配单词
new
,然后匹配ee
,两边都没有单词边界。以下是这些测试产生这些结果的原因:
System.out.println(sa.matches(“.*\\s\\bnew\\b\\sfre.”)//正确
这是新的自由代码
包含某些内容
+空白
+单词边界
+新的
+单词边界
+空白
+fre
+某些内容
。单词边界在n
和wf
之间匹配
System.out.println(sa.matches('.\\s\\Bee\\B\\s.')//错误
\s
和e
之间的非单词边界\B
无法匹配,因为e
是单词字符。因此,没有对手
System.out.println(sa.matches(“.\\Bee\\B.”)//正确
非单词边界\B
在e
之间匹配,因为e
在freecode
中不在单词边界位置(它在两个字母之间,单词字符),最后的e
后面再次跟一个字母(在这种情况下是c
)。这是一个有效的匹配项
要启用这两种检查,需要组合第一个和第三个正则表达式模式。您不需要同时使用\s\b
和\b\s
。如果只想匹配整个单词new
删除\s
:
System.out.println(sa.matches(".*\\bnew\\b.*\\Bee\\B.*"));
如果需要匹配new
周围的空格,请使用:
System.out.println(sa.matches(".*\\snew\\s.*\\Bee\\B.*"));
打扰一下,问题是什么?为什么会得到True
,False
,True
?第一个正则表达式将单词边界与空格匹配,这给了我True,我对此很满意,在第二种情况下,非单词边界与空格不起作用,因此我无法构造一个正则表达式,它将匹配具有“new”单词边界的字符串,然后是“ee”非单词边界。尝试此。*新。*免费[^]您能提供有效和无效输入的示例吗?我觉得您正在寻找类似于“*\\snew\\s.\\Bee\\B.*”
的东西。在\snew\s
中不需要\b
,因为在\s
和n
之间有一个单词边界。这是多余的。“这是新的自由码”--有效字符串“这是新的旧的自由码”--无效字符串
System.out.println(sa.matches(".*\\snew\\s.*\\Bee\\B.*"));