저는 Regex를 처음 사용하고 튜토리얼을 살펴 봤지만 원하는 작업에 적용되는 것을 찾지 못했습니다.
나는 무언가를 찾고 싶지만 그 뒤에 오는 모든 것을 반환하지만 검색 문자열 자체는 반환하지 않습니다.
예 : ” 굉장한 절름발이 문장 “
” 문장 ” 검색
return ” 정말 멋져요 “
어떤 도움이라도 대단히 감사하겠습니다.
이것은 지금까지 내 정규식입니다.
sentence(.*)
하지만 반환 : 굉장한 문장
Pattern pattern = Pattern.compile("sentence(.*)");
Matcher matcher = pattern.matcher("some lame sentence that is awesome");
boolean found = false;
while (matcher.find())
{
System.out.println("I found the text: " + matcher.group().toString());
found = true;
}
if (!found)
{
System.out.println("I didn't find the text");
}
답변
주석에서 요청한대로 “정규 표현식 만”으로이를 수행 할 수 있습니다.
(?<=sentence).*
(?<=sentence)
A는 긍정적 인 lookbehind 주장은 . 이것은 문자열의 특정 위치, 즉 sentence
해당 텍스트 자체를 일치의 일부로 만들지 않고 텍스트 바로 뒤의 위치 에서 일치합니다. 결과적으로 (?<=sentence).*
는 sentence
.
이것은 정규식의 아주 좋은 기능입니다. 그러나 Java에서는 유한 길이 하위 표현식에 대해서만 작동합니다. 즉 (?<=sentence|word|(foo){1,4})
, 합법적이지만 (?<=sentence\s*)
그렇지 않습니다.
답변
귀하의 정규식 "sentence(.*)"
이 맞습니다. 괄호 안의 그룹 내용을 검색하려면 다음을 호출합니다.
Pattern p = Pattern.compile( "sentence(.*)" );
Matcher m = p.matcher( "some lame sentence that is awesome" );
if ( m.find() ) {
String s = m.group(1); // " that is awesome"
}
m.find()
이 경우 의 사용 (문자열의 아무 곳이나 찾으려고 시도)이 아니라 m.matches()
( “some lame”접두사 때문에 실패합니다.이 경우 regex는 여야 함 ".*sentence(.*)"
)
답변
Matcher가로 초기화 str
되면 매치 후 매치 후 부품을 얻을 수 있습니다.
str.substring(matcher.end())
샘플 코드 :
final String str = "Some lame sentence that is awesome";
final Matcher matcher = Pattern.compile("sentence").matcher(str);
if(matcher.find()){
System.out.println(str.substring(matcher.end()).trim());
}
산출:
굉장하다
답변
matcher 의 group (int) 을 사용해야합니다. group ( 0)은 전체 일치이고 group (1)은 표시 한 첫 번째 그룹입니다. 지정한 예에서 group (1)은 ” sentence ” 뒤에 오는 것 입니다.
답변
다음 줄에 “group ()”대신 “group (1)”을 입력하면 예상 한 결과가 반환됩니다.
System.out.println("I found the text: " + matcher.group(**1**).toString());