2013-03-15 161 views
0

我最近開始製作一個ircbot,並且在我的ban命令中我需要提取目標和模式的名稱。從字符串中提取信息的正則表達式

有不同的模式+和 -

因此字符串的一個例子看起來像

!!ban + Sjele 

!!ban - Sjele 

我怎麼會找到並獲得方式,無論是 - 或+與正則表達式和在這種情況下的目標Sjele?

我在網上regextester regexpal想這並沒有奏效,這是接近我可以用我的小知識獲取正則表達式的

((.*)(+| -)(.*)) 

使用匹配和模式時,此正則表達式的工作,我想3個變量:

  • PREF(應該是!禁令)
  • 模式(無論是 - 或+)
  • 目標(在這種情況下Sjele)

謝謝
(英語不是我的母語,我有麻煩越來越明白,如果我是不清楚,請告訴我,我會盡力解釋好。)

+5

正則表達式在這裏是矯枉過正的。只需使用String方法將模式和名稱拉出即可。 – 2013-03-15 21:11:27

+0

正則表達式是\!\!ban([\ + | \ - ])(。*) – 2013-03-15 21:13:00

回答

0

一個正則表達式是有點矯枉過正對於這種情況。我創建了一個需要String測試的方法,這將返回String與您正在尋找的字符,或者null如果沒有匹配:

public static String getBanStatus(String s1) 
{ 
    if (s1.contains(Character.toString('+'))) return "+"; 
    if (s1.contains(Character.toString('-'))) return "-"; 
    else return null; // Or return something meaning no match was found 
} 

如果需要一個正則表達式,一個Pshemo給出的應該就夠了。

0

既然你是要求正則表達式,你可以試試!!ban ([+\\-]) (\\w+)。在第1組中,您將擁有+或 - 並且組2將包含禁止/非受限用戶的名稱。

下面是簡單的例子

Matcher m = Pattern.compile("!!ban ([+\\-]) (\\w+)").matcher(
     "!!ban - Sjele"); 
if (m.find()) 
    System.out.println(m.group(1) + ":" + m.group(2)); 

如果您正在使用Java7你能說出你的組爲更好的代碼

!!ban (?<operation>[+\\-]) (?<userName>\\w+) 

,並使用它像這樣

Matcher m2 = Pattern 
     .compile("!!ban (?<operation>[+\\-]) (?<userName>\\w+)").matcher(
       "!!ban - Sjele"); 
if (m2.find()) 
    System.out.println(m2.group("operation") + ":" + m2.group("userName")); 
0

你需要逃避+和 - s ymbols like \ + \ -

否則它們對正則表達式編譯器有特殊的含義。

+1

只有'+'是OP正則表達式中的特殊字符。 '-'在字符類('[[...]')中是特殊的,但在它之外是正常字符。 – Pshemo 2013-03-15 21:30:35

0

你可以試試這個正則表達式:

!!ban\s*(\+|\-)\s*(\w+) 

您將有第一批模式和第二目標