2013-03-07 31 views
2

我正在使用Java。我需要分析以下行使用正則表達式:正則表達式在java中解析字符串

<actions>::=<action><action>|X|<game>|alpha 

應該給我令牌<action><action>X<game>

什麼樣的正則表達式是否行得通呢?

我正在嘗試...... "<[a-zA-Z]>"但這並沒有照顧Xalpha

+1

如果它匹配'alpha'與否? – 2013-03-07 05:59:18

+0

是的,它也應該包含alpha。 – Dev 2013-03-07 06:14:02

回答

5

你可以嘗試這樣的事情:

String str="<actions>::=<action><action>|X|<game>|alpha"; 
str=str.split("=")[1]; 
Pattern pattern = Pattern.compile("<.*?>|\\|.*?\\|"); 
Matcher matcher = pattern.matcher(str); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 
+0

這包括X與| X |。正則表達式應該忽略| – Dev 2013-03-07 06:21:10

0

從原始模式中,不清楚你的意思是說模式中是否存在<>,我會遵循該假設。

String pattern="<actions>::=<(.*?)><(.+?)>\|(.+)\|<(.*?)\|alpha"; 

爲Java代碼,你可以使用Pattern和Matcher:這裏的基本思想是:

Pattern p = Pattern.compile(pattern, Pattern.DOTALL|Pattern.MULTILINE); 
    Matcher m = p.matcher(text); 
    m.find(); 
    for (int g = 1; g <= m.groupCount(); g++) { 
     // use your four groups here.. 
    } 
+0

等待,爲什麼alpha在這裏硬編碼。是的,它應該包含「<" and ">」以及不包含這些「<" and ">」結尾的單詞。在上面的示例中,令牌應該是,,X,,alpha。 – Dev 2013-03-07 06:17:02

1

你應該有這樣的事情:

String input = "<actions>::=<action><action>|X|<game>|alpha"; 
Matcher matcher = Pattern.compile("(<[^>]+>)(<[^>]+>)\\|([^|]+)\\|(<[^|]+>)").matcher(input); 
while (matcher.find()) { 
    System.out.println(matcher.group().replaceAll("\\|", "")); 
} 

你沒有specefied如果你想返回或者不是,在這種情況下,它不返回它。

您可以通過在我寫的正則表達式的末尾添加|\\w*來返回字母。

這將返回:

<action><action>X<game> 
+0

模式不應該包含「|」。這吐出:令牌: 令牌: 令牌: 令牌:| X | 令牌: Dev 2013-03-07 06:22:53

+0

刪除'|'的一種方法與我在編輯過的文章中所做的一樣。 – Maroun 2013-03-07 06:25:00

+0

你能否告訴我如何標記這個: :: = 行動。這裏沒有「|」並且您需要獲得令牌並採取行動?謝謝。 – Dev 2013-03-07 06:39:15

0

您可以使用下面的Java正則表達式:

Pattern pattern = Pattern.compile 
     ("::=(<[^>]+>)(<[^>]+>)\\|([^|]+)\\|(<[^>]+>)\\|(\\w+)$"); 
+0

nope不起作用 – Dev 2013-03-07 06:24:20

+0

@Dev請參閱此處的實時演示:http://regex101.com/r/uU2fT9 – anubhava 2013-03-07 06:25:02

+0

@Dev:或者看看上面運行的正則表達式的Java代碼:http://ideone.com/8b7DP0 – anubhava 2013-03-07 06:30:05

相關問題