2012-11-08 2 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 실제 문제를 찾으십시오. –

+0

@stema .. 내 정규식 시도를 고쳐 주셔서 감사합니다, 잘 작동합니다. – Shamik

1

나는 간단하게 것입니다 : 여러 개의 AAA의 * 부품을 포함 할 수있는 문자열을 가정

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

확실하게 "*"를 의미합니까? – Adam

+0

그는 두 번째 요구 사항이 있습니다. 즉, 문자열에 상단 케이스가 있습니다. 당신은 아직 그것을 다루지 않았습니다. – BlackVegetable

+0

@ Delta458 .. 문자열 비교를 사용하여 할 수 있지만 정규식 패턴을 사용하여 할 수 있는지 확인하고 싶었어요. 그래도 고마워. – Shamik

2

:

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 ... 위대한 잡기, 당신의 예에서 ABC *를 선택할 것입니다 – Shamik

0

당신은 백 슬래시 문자 그대로의 별표를 탈출해야 참조하십시오. 결국 Java에서 이중 백 슬래시가됩니다.

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

OP는 문자 클래스를 사용하며 이스케이프 처리 할 필요가 없습니다. 문제는 다른 것입니다. 위의 @ stema의 대답을 참조하십시오. –