Java 使用可选字符串匹配模式
在Java应用程序中,我使用以下正则表达式:(\w+)\ud匹配此表单的模式:Java 使用可选字符串匹配模式,java,regex,Java,Regex,在Java应用程序中,我使用以下正则表达式:(\w+)\ud匹配此表单的模式: apples_1 oranges_2 然后我使用第一个捕获组值(苹果、桔子) 但是,我现在有一个新的请求来匹配这些字符串: applesdrp_1 orangesdrp_2 其中“drp”是一个固定的3个字符的字符串,需要捕获与以前相同的值:苹果、桔子 例如,如果我使用这个正则表达式:(\w+(:drp)?\ud 它可以在apples_1上完成工作,但不能在applesdrp_1上完成 有没有一种方法可以用正则表
apples_1
oranges_2
然后我使用第一个捕获组值(苹果、桔子)
但是,我现在有一个新的请求来匹配这些字符串:
applesdrp_1
orangesdrp_2
其中“drp”是一个固定的3个字符的字符串,需要捕获与以前相同的值:苹果、桔子
例如,如果我使用这个正则表达式:(\w+(:drp)?\ud
它可以在apples_1上完成工作,但不能在applesdrp_1上完成
有没有一种方法可以用正则表达式实现这一点?是的,您可以-一种方法是使用负回溯,以确保drp被强制在组外(如果存在的话)
(\w+)(?<!drp)(?:drp)?_\d+
(\w+)?
请参阅演示您可以使用非贪婪量词:
(\w+?)(?:drp)?_\d
通过这种方式,\w+?
将使用字符,直到找到“drp\u N”
或“\u N”
(其中N是一个数字)
如果使用贪婪量词,\w+
获取所有可能的字符(包括下划线和数字,因为它们包含在\w
中),然后逐个返回字符,直到(?:drp)?\ud
成功。但是由于(?:drp)?
是可选的,当正则表达式引擎发现\N
\w+
是贪婪的时,它将始终使用可选的“drp”,因为它是可选的。您需要将第一个匹配设为非贪婪的。(\w+)(?:drp)?\d
这不是问题,这是给我的regex codez需求清单,在需求末尾有一个完全无用的问题。谢谢!我知道我遗漏了一点:)非常感谢!这也是一个很好的解决方案。谢谢