Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 为什么我的Matcher.find()的计算结果为false?_Java_Regex - Fatal编程技术网

Java 为什么我的Matcher.find()的计算结果为false?

Java 为什么我的Matcher.find()的计算结果为false?,java,regex,Java,Regex,我有以下代码: Pattern lPattern = Pattern.compile("^.*THREADINFO.*\\sJ9VMTHREAD:([0123456789xABCDEF]*).*") Matcher lMatcher = lPattern.matcher("3XMTHREADINFO \"WebContainer : 14\" J9VMThread:0x0000000085046300, j9thread_t:0x00007FC39C10BDF0, java/lang/

我有以下代码:

Pattern lPattern = Pattern.compile("^.*THREADINFO.*\\sJ9VMTHREAD:([0123456789xABCDEF]*).*")
Matcher lMatcher = lPattern.matcher("3XMTHREADINFO      \"WebContainer : 14\" J9VMThread:0x0000000085046300, j9thread_t:0x00007FC39C10BDF0, java/lang/Thread:0x000000000B2E08E8, state:B, prio=5")
if(lMatcher.find())
    println lMatcher.group(1)

我觉得它应该打印
0x0000000085046300
,但它没有。这个正则表达式在从输入行获取
0x0000000085046300
时非常有效,这可以在在线正则表达式测试仪中看到。但是为什么这个Java代码不能打印相同的内容呢?我遗漏了什么?

您的正则表达式是区分大小写的,因此没有选择
J9VMThread
,因为它在正则表达式中是用大写字母拼写的。您可以使用
(?i)
作为正则表达式的前缀,或者使用
Pattern.compile(regex,Pattern.CASE\u不区分大小写)
来关闭大小写敏感度。

您的正则表达式是区分大小写的,因此不会选择
J9VMThread
,因为它在正则表达式中是用大写字母拼写的。您可以使用
(?i)
作为正则表达式的前缀,或者使用
模式.compile(正则表达式,模式.不区分大小写)
来关闭大小写区分。

您需要将模式定义为不区分大小写,因为它现在包含J9VMTHREAD,并且您的输入包含J9VMTHREAD(小写):


您需要将模式定义为不区分大小写,因为现在它包含J9VMTHREAD,并且您的输入包含J9VMTHREAD(小写):


您的正则表达式捕获组是错误的,它甚至匹配字符串,如
0x85046300
,并且需要很多(无用的)步骤

在addiction中,您没有指定不区分大小写的标志,这就是它不匹配的原因

通过这种方式,可以大大简化正则表达式

(?i)J9VMTHREAD:([0-9]+x[0-9A-F]+)

因为我认为你想提取一个十六进制数,你可以简化它:

(?i)J9VMTHREAD:(0x[0-9A-F]+)


我希望它有帮助

您的正则表达式捕获组是错误的,它甚至匹配字符串,如
0x85046300
,并且需要很多(无用的)步骤

在addiction中,您没有指定不区分大小写的标志,这就是它不匹配的原因

通过这种方式,可以大大简化正则表达式

(?i)J9VMTHREAD:([0-9]+x[0-9A-F]+)

因为我认为你想提取一个十六进制数,你可以简化它:

(?i)J9VMTHREAD:(0x[0-9A-F]+)


我希望这有帮助

是的!请注意,在线正则表达式检查与java中的行为不同。是的!请注意,在线正则表达式检查与java中的行为不同。
Pattern lPattern = Pattern.compile("^.*THREADINFO.*\\sJ9VMTHREAD:([0123456789xABCDEF]*).*", Pattern.CASE_INSENSITIVE);