簡體   English   中英

我想從Java中的匹配模式中提取值

[英]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.

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