[英]Why matcher.find() for input parameter always return '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.