Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用可选字符串匹配模式_Java_Regex - Fatal编程技术网

Java 使用可选字符串匹配模式

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上完成 有没有一种方法可以用正则表

在Java应用程序中,我使用以下正则表达式:(\w+)\ud匹配此表单的模式:

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需求清单,在需求末尾有一个完全无用的问题。谢谢!我知道我遗漏了一点:)非常感谢!这也是一个很好的解决方案。谢谢