2016-11-25 2 views
1

누락 마지막 심볼 나는 정규 표현식을 썼다. 일부 거리에는 거리 위치 설명이 있으며 선택하지 않으려합니다.

는 여기있다 : https://regex101.com/r/j3gF5b/2

그것은 작동하지만, 거리 이름의 모든 마지막 기호가 누락되었습니다. 왜 이런 일이 일어나고 어떻게 수리해야하는지 알고 싶습니다. )하지 정확히 한 문자

+1

당신이 명확 수 : 당신은 위치 설명과 함께 거리를 싶지 않는 또는 당신이 위치를 원하는 해달라고을 설명 자체? – Fallenhero

답변

2

귀하의 [^)] 일치 ... 그

당신이 사용할 수있는 거리 이름에서 누락 된 문자입니다 :

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s([^\)]+?)$ 
+0

그래서 어떻게 괄호로 줄을 놓치고 마지막 심볼을 잃어 버리지 않을 수 있습니까? –

+0

내 대답을 업데이트하거나 @Wiktor Stribiżew 대답을 사용하십시오 – Fallenhero

+0

고마워요,이 작동 –

1

이유입니다 그 부정 문자 클래스 여전히 은 일치하는 하위 문자열을 소모합니다. 문자열/라인의 끝을 주장 후 부정적인 lookbehind (제로 폭 주장, 비 소비 구조를) 사용

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.+)$(?<!\)) 
                 ^^^^^^^ 

그것은 )로 끝나는 모든 경기를 실패합니다.

regex demo

또 다른 방법은 (자바 스크립트와 같이 정규식 엔진이 lookbehinds을 지원하지 않는 경우) 부정적 예측을 사용하는 경유 참조 :

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)(?!.*\)$)\s*(.+)$ 

another demo

+1

엔진처럼 보이는이 기능을 지원하지 않지만 감사합니다 –

+0

무엇을 의미합니까? 어떤 엔진을 사용하고 있습니까? –

1

그것을 넣어보기 캡처 그룹 내에서 (그리고 결국에는 개행 문자도 제외합니다.)

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.*[^)\r\n])$ 

demo

만 위치 설명을 폐기하고 나머지 유지하려면 :

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s([^(\s]*(?:\h+[^(\s]+)*) 

demo