2016-09-14 4 views
0

정규식을 사용하여 특정 문자열이 포함 된 텍스트의 전체 문장을 일치시킵니다. 문장이 어떤 구두점으로 끝나는 한 이것은 잘 작동합니다. 문장이 구두점없이 텍스트의 끝에있는 경우에는 작동하지 않습니다.정규식은 텍스트 끝까지 일치합니다.

이 내 현재의 표현이다 : 이것은 문자열와 문장

: 대한

[^.?!]*(?<=[.?\s!])string(?=[\s.?!])[^.?!]*[.?!] 

작품. 더 많은 텍스트.

더 많은 텍스트 :

은 작동하지 않습니다. 이 문자열

와 문장이 의도 한대로이 단어를 만들 수있는 방법이 있나요입니까? "텍스트 끝"에 대한 문자 클래스를 찾을 수 없습니다.

답변

0

텍스트 끝은 문자 클래스가 아닌 $ 앵커와 일치합니다. (1) 문장 문자열 후 바로 종료하고, (2) 문장 문자열 후하지만 문장의 끝에 구두점 언젠가 끝 : 당신은 두 개의 별도의 문제가

당신이 해결해야합니다.

이렇게하려면 (선택 사항) 뒤에 일치 항목을 만들어야하지만 문자열 끝에 일치하는 앵커가 있어야합니다. 이것은 문장 끝의 구두점 (옵션)을 인식 한 후에 이어지는 모든 것을 일치시켜야하므로 문자열 끝의 앵커가 일치합니다.

내 변경 : 원래 정규식에 string 후 모든 것을 가지고 (?:...)?에 둘러싸 일 - (?:...)는 "비 기억"그룹되고, 그리고 ? 전체 그룹을 선택하고. 문자열의 끝을 고정하려면 $을 따르십시오. 의 ?가 만들어 다시는 (?:...)는 "비 기억"그룹을 만드는 것입니다 -

은 옵션 그룹 내에서, 당신은 또한 간단한 [.?!](?:[.?!].*)?로 대체하여, 그 자체가 선택의 끝 문장을 만들 필요가 그룹 선택 - 그리고 .*은 문장의 끝 부분을 찾은 후에 원하는만큼 일치시킬 수 있습니다.

[^.?!]*(?<=[.?\s!])string(?:(?=[\s.?!])[^.?!]*(?:[.?!].*)?)?$ 
0

텍스트의 끝 기호는 $입니다 (텍스트 시작 기호는 필요하다면 ^입니다).

$을 구두점 목록에 추가하면 (예 : [.?!$]) 쉽게 찾을 수 있습니다. 대체 선택으로 더 잘 작동한다는 것을 알게 될 것입니다 : ([.?!]|$).

0

당신의 정규식은 당신이 달성하기에 너무 복잡합니다.

만 단어가 바로

"\bstring\b" 

그것은 시작, 종료 및 비 영숫자 구분 기호를 일치합니다 사용과 일치합니다.

은 다음과 같이 작동합니다

string is at the start 
this is the end string 
this is a string. 
stringing won't match (you don't want a match here) 
0

당신은 사용에 대한 자세한 내용은 문제의 언어를 추가해야합니다.

은 여기 내 예를 사용하여 자바 스크립트입니다 :

var reg = /^([\w\s\.]*)string([\w\s\.]*)$/; 
 

 
console.log(reg.test('This is a sentence with string. More text.')); 
 

 
console.log(reg.test('More text. This is a sentence with string')); 
 

 
console.log(reg.test('string'))

참고 :

* : 0 번 이상 일치시킵니다.

? : 0 또는 한 번 일치합니다.

+ : 한 번 이상 매치하십시오.

*은 (으)로 변경할 수 있습니까? 또는 정의를 원할 경우 +를 누릅니다.

관련 문제