簡體   English   中英

為什么我的Matcher.find()評估為false?

[英]Why my Matcher.find() evaluates to false?

我有以下代碼:

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_INSENSITIVE)關閉區分大小寫的功能。

您的正則表達式捕獲組是錯誤的,它甚至匹配0x0x0x0x0x0x0x0x0x85046300類的0x0x0x0x0x0x0x0x0x85046300 ,並且需要很多(無用的)步驟。

上癮時,您沒有指定不區分大小寫的標志,這就是它不匹配的原因。

這樣可以大大簡化正則表達式

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

而且由於我認為您想提取一個十六進制數,因此可以進一步簡化它:

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

希望對您有所幫助

您需要將模式定義為不區分大小寫,因為它現在包含J9VMTHREAD,而您的輸入包含J9VMThread(小寫):

Pattern lPattern = Pattern.compile("^.*THREADINFO.*\\sJ9VMTHREAD:([0123456789xABCDEF]*).*", Pattern.CASE_INSENSITIVE);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM