2012-06-07 3 views
0

java의 문자열에서 "#"기호로 시작하는 첫 번째 단어 만 찾고 싶습니다. 기호와 단어 사이에는 공백이 없어야합니다.특수 문자에서 첫 번째 단어 시작 찾기

문자열로 출력을하여야한다 "안녕 당신은 #이 #how있다"

내가 적절한 패턴을 찾을 수 없습니다 아직 정규식이 시도하지만 어떻게. 이것 좀 도와주세요.

감사합니다.

+0

당신은 무엇을하려고 했습니까? – TimK

+0

다음 패턴 # [a-zA-z] –

+0

에 대해 일치시켜보십시오. "ab cd # ef #gh"'의 결과는 무엇입니까? – Pshemo

답변

1

시험해보기

replaceFirst("^.*?(#\\S+).*$", "$1"); 

정확하게는 아니지만 작동해야합니다.

문자열에 이러한 토큰이 있다고 가정합니다. 그렇지 않은 경우, 당신은 토큰을 추출하기 전에 정규식 일치하는지 여부를 확인 할 수 있습니다 :이 방법은 "sdfkhk#sdfhj sdf""#sdfhj" 일치하는 것으로

matches("^.*?(#\\S+).*$"); 

참고.

이 경우를 제외하려면 정규식을 "^.*?(?<= |^)(#\\S+).*$"으로 수정할 수 있습니다.

+0

replaceFirst ("^. *? (# \\ S +). * $", "$ 1"); 완벽하게 작동 .. 감사 nhahtdh. –

0

이 정규식 표현을 시도 할 수 있습니다 :

"[^a-zA-Z][\\S]+?[\\s]" 

당신은 당신이 찾고있는 특정 문자가이 경우

"#[\\S]+?[\\s]" 
+0

'[/ S]'는'/'또는'S'와 일치하고'[^/S]'는 ** **' /'또는'S'. 공백이 아닌 문자와 일치 시키려고한다면'\ S]'또는'\ S' (더 나은)입니다. 그리고 Java 문자열 리터럴에서 백 슬래시 (\\ S "')를 이스케이프 처리해야합니다. –

+0

@AlanMoore 당신은 절대적으로 맞습니다. 나는 PHP 컨텍스트에서 정규식을 사용하고 혼란 스러울 뿐이다. –

1
String str ="hi #how are # you"; 
if (str.contains("#")) { 
     int pos = str.indexOf("#"); 

     while (str.charAt(pos + 1) == ' ') 
      pos++; 


     int last = str.indexOf(" ", pos + 1); 

     str = str.substring(pos + 1, last); 
     System.out.println(str); 
    } 
else{ 

} 

출력에 시작 해야할지하지 않는 : 방법

+0

또한 "#"와 일치하지 않으며 범위를 벗어난 색인을 제공하지 않습니까? –

+0

@Hans 감사합니다. 편집 된 답변을 참조하십시오 ... – MAC

+1

이 경우에 실패했습니다. "안녕하세요 # # # 예를 들어 #dsf는 #" " – nhahtdh

1

xx # xx가 잘못된 단어라고 가정합니다. (대신 m.group(2)를 패턴에 "#(\\w+)"m.group(1)를 사용하지 않은 경우)이 나는 진정한 "ab cd#ef #gh" 결과를

String str ="ab cd#ef #gh"; 
Pattern pattern=Pattern.compile("(^|\\s)#(\\w+)"); 
Matcher m=pattern.matcher(str); 
if(m.find()) 
    System.out.println(m.group(2)); 
else 
    System.out.println("no match found"); 

시도 이잖아 ->gh

"#ab cd#ef #gh" 결과를 ->ab

관련 문제