2012-11-08 81 views
2

我正在嘗試使用java製作一個簡單的正則表達式模式工作。我需要識別任何以尾隨星號結尾的大寫單詞。從以下示例中: 以asterix結尾的單詞的Java正則表達式模式

 
Test ABC* array 
我需要識別「ABC *」或確切地說,任何帶有上部結尾並以星號結尾的單詞。我嘗試了以下與我的有限正則表達式知識相匹配的模式,但到目前爲止還沒有成功。
 
String text = "Test ABC* array"; 
Matcher m = Pattern.compile("\b[A-Z]+[*]?\b").matcher(text); 
任何指針將不勝感激。

感謝

+0

它也行不通,請參閱我的答案的解決方案。 – Flawyte

+0

@BlackVegetable - 這個明星不是一個Kleene明星 - 它是一個簡單的人物(實際上是一個人物角色)。 –

回答

8

的問題是,你沒有一個word boundary在星星之後結束。因此,嘗試這種

Matcher m = Pattern.compile("\\b[A-Z]+\\*\\B").matcher(text); 

\B不是一個單詞邊界,所以這正是你的*和一個空格之間得到什麼。

看到它here on Regexr

+0

+1中選擇ABC *來查找實際問題。 –

+0

@stema ..感謝您修復我的正則表達式嘗試,很好。 – Shamik

1

我會保持它的簡單:

if(text.contains("*")) { 
    int index = text.lastIndexOf("*"); 
    String ident= text.substring(0,index-1); 
} 
+2

你的意思是「*」? – Adam

+0

請注意,他有第二個要求:該字符串有上殼。你還沒有涉及。 – BlackVegetable

+0

@ Delta458 ..我可以做到這一點使用字符串比較,但只是想檢查我是否可以使用正則表達式模式。不過謝謝。 – Shamik

2

假設你的字符串可以包含多個AAA *部分:

String text = "Test ABC* array"; 
Matcher m = Pattern.compile("([A-Z]+\\*)").matcher(text); 
while (m.find()) { 
    System.out.println(m.group()); 
} 
+0

謝謝,我正在尋找的東西也簡化了。 – Shamik

+0

在「xyzABC * d」中找不到「ABC *」嗎? –

+0

@Ted Hopp ......非常棒,它會在您的示例 – Shamik

0

你必須使用反斜線字面星號。它最終成爲Java中的雙反斜槓。

"[A-Z]+\\*" 
+0

OP正在使用角色類,他不需要逃避它。問題是別的。請參閱上面的@ stema的答案。 –