Java 句子结尾的正则表达式

Java 句子结尾的正则表达式,java,android,regex,Java,Android,Regex,我试图用正则表达式匹配Java/Android中的模式。这种模式是在字符串末尾的辅音-元音-s,类似于在similares和científicas中,但不像在process中 我的代码: Pattern pat = Pattern.compile("[^aeiou][aeiou]s\\b"); Matcher matcher = pat.matcher(word); Log.e(TAG, word + " contains pattern? " + matcher.matches() );

我试图用正则表达式匹配Java/Android中的模式。这种模式是在字符串末尾的辅音-元音-s,类似于在similares和científicas中,但不像在process中

我的代码:

Pattern pat = Pattern.compile("[^aeiou][aeiou]s\\b");
Matcher matcher = pat.matcher(word);

Log.e(TAG, word + " contains pattern? " + matcher.matches()  );
该测试仪说我是正确的:

这一个是Java特有的,它告诉我我也是正确的:

但在我的Android应用程序中,我无法让它们匹配

我的输出:

activ contains pattern? false
program contains pattern? false
informá contains pattern? false
consult contains pattern? false
process contains pattern? false
dados contains pattern? false
domicili contains pattern? false
inform contains pattern? false
relacion contains pattern? false
outr contains pattern? false
consultoria contains pattern? false
científicas contains pattern? false
técn contains pattern? false
similares contains pattern? false
我还测试了

"[^aeiou][aeiou]s$"


我遗漏了什么?

这是您用来匹配辅音-元音-s的正则表达式:

^[^AEIOUaeiou]*[AEIOUaeiou]+[s]$
^[A-Za-z]*[AEIOUaeiou]+[s]$
或者,对于所有事物-元音-s:

^[^AEIOUaeiou]*[AEIOUaeiou]+[s]$
^[A-Za-z]*[AEIOUaeiou]+[s]$
*:0或多次出现

+:1次或多次出现

匹配尝试匹配整个字符串。如果字符串被拆分为单词并被清除,则可以添加。*以匹配任意字符任意次数

.-匹配任何字符

*-量词:0次或更多次

^-字符串的开头

^\\b.*[^aeiou][aeiou]s\\b$
$-字符串结尾

^\\b.*[^aeiou][aeiou]s\\b$
然而,需要注意的是,如果字符串没有被清理,它也会匹配非单词字符

整个句子都是匹配的!pes,\n\rWA也将匹配

您还可以将.*替换为:

\\w*-任意数量的单词字符[A-Za-z0-9_33;


\\b\\w*-单词边界后跟任意数量的单词字符

使用Matcherfind。匹配整个字符串。是否使用正则表达式实现?我不知道你的语言,但通常有很多例外。当然!对于.matches,我需要执行类似于.[^aeiou][aeiou]s\\b的操作,因为它会尝试查找完全匹配。我真傻。谢谢你为我指明了正确的方向@拉斯蒂克斯:我很善于观察。但我实际上只是在应用了词干算法之后做了一些非常轻微的修改。所以应该没问题,谢谢。答案是在表达式或使用.find之前添加。*。这两种方法都有效。不过还是谢谢你。