我有以下字符串:
“ Perl是RSA加密前后唯一看起来相同的语言。” :)
此模式"\\p{javaUpperCase}.*\\."
查找大写字符和句点。它为该字符串返回true,但是如果我删除单词“ Perl”,它将给我false
。这是为什么?仍然有“ RSA”一词,也是大写的。\p{javaUpperCase}
-代表大写字母.
表示大写字母之后的任何字符*
是贪婪的量词,一次或多次\\.
-句点。
我哪里错了?为什么只看开头和结尾?
最佳答案
可能是因为它试图匹配整个字符串。 (参考:http://www.regular-expressions.info/java.html说:“重要的是要记住,String.matches()仅在可以匹配整个字符串时才返回true”)。根据您使用的正则表达式库/函数,可能需要对所有内容进行匹配。
如果没有“ Perl”,则字符串不会以大写字母开头,因此即使子字符串匹配,整个字符串也不会。
尝试.*(\p{javaUpperCase}.*\.).*
匹配子字符串。
在两端添加的.*
允许在感兴趣的子字符串的任一端添加额外的字符。