[英]I'm looking to extract values from matched pattern in Java
我正在使用這個正則表達式:
([\\ w \\ s] +)(= |!=)([\\ w \\ s] +)((或|和)([\\ w \\ s] +)(= |!=)([\\ w \\ S] +))*
匹配如下的字符串: i= 2 or i =3 and k!=4
當我嘗試使用m.group(index)提取值時,我得到: (i, =, 2, **and k!=4**, and, k, ,!=, 4).
預期輸出:(i,=,2,或,i,=,3,和,k,!=,4)如何正確提取值?
PS m.matches()
返回true。
你試圖匹配一個表達式的正則表達式...你可能想要使用一個解析器,因為這個正則表達式(當你擁有它時)無法進一步擴展..但是解析器可以隨時擴展
例如,考慮使用antlr( ANTLR:有一個簡單的例子嗎? )
這是因為你的第三組parens(你用來重復表達的那一組)讓你感到困惑。 嘗試使用非捕獲的parens:
([\w\s]+)(=|!=)([\w\s]+)(?: (or|and) ([\w\s]+)(=|!=)([\w\s]+))*
為什么不簡化你的表達以完全匹配你正在尋找的東西?
!?=|(?:or|and)|\\b(?:(?!or|and)[\\w\\s])+\\b
實時演示將鼠標懸停在文本區域中的藍色氣泡上,以確切了解匹配的內容
示范文本
i= 2 or i =1234 and k!=4
找到匹配項
[0][0] = i
[1][0] = =
[2][0] = 2
[3][0] = or
[4][0] = i
[5][0] = =
[6][0] = 1234
[7][0] = and
[8][0] = k
[9][0] = !=
[10][0] = 4
括號中的所有內容都構成了一個捕獲組,您可以稍后通過索引訪問該組。 但是你可以創建你不需要非捕獲的組: (?: ... )
,然后在Matcher.group(int)
不會考慮它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.