java正则表达式,用于匹配句子中的最后一个字母和单词
用于搜索单词以及返回行中最后一个字符的正则表达式。 到目前为止,我得到的是->;“[a-z]$|[a-zA-z]+”
这篇文章是“很多???很好”
问题是“are”得到了匹配,而不是“e”,第二个正则表达式模式得到了优先权。我希望“are”与“e”匹配
有什么解决办法吗
你可以在下面搜索框中键入要查询的问题!
用于搜索单词以及返回行中最后一个字符的正则表达式。 到目前为止,我得到的是->;“[a-z]$|[a-zA-z]+”
这篇文章是“很多???很好”
问题是“are”得到了匹配,而不是“e”,第二个正则表达式模式得到了优先权。我希望“are”与“e”匹配
有什么解决办法吗
# 1 楼答案
主要问题是正则表达式不能多次使用文本。您只能捕获重叠的文本,并且可以在lookarounds中进行捕获
因此,您可以使用
见regex demo
解释
(?s)
-打开点调用模式,以便.
可以匹配换行符^
-字符串的开头(?=.*([a-z])$)
-一个正向前瞻,检查所有字符串并捕获最后一个字母。如果有尾随空格,则将其替换为(?=.*([a-z])\\s*$)
。注意:可以使用\\p{Ll}
匹配Unicode小写字母李>|
-或者李>[a-zA-Z]+
-1个或多个字母(实际上,您可以在Java中使用\\pL
来代替它,以允许匹配Unicode字母)因为它是Java,所以您只需要检查第一个组是否不是
null
,如果不是,您就得到了最后一个字母。如果第一组为空,则得到一个单词见IDEONE demo
# 2 楼答案
至少在。NET、Java、Javascript和PHP(因此……这似乎是一个标准),组[0]包含所有匹配项本身,因此您只需要将正则表达式中的最后一个字母分组
[a-zA-Z]+([a-zA-Z])$
“很多???呜呜的是”
你的文字如下:
组[0]=“是”
组[1]=“e”
# 3 楼答案
这个正则表达式的速度是
[a-zA-Z]+($(?<=[a-z]))?
与@Stribizev的相比
最值得注意的是失败时,在本例中,最后一个字符不是小写
基准
失败(!=[a-z]$):
样本
"many??? Woooooooooooords are in the Fountain of despaR
成功(=[a-z]$):
样本
"many??? Woooooooooooords are in the Fountain of despar