2013-10-17 2 views
1

주소 끝에 한 개의 #을 추출하려고하지만 특정 지정 이후가 아닌 경우에만 시도합니다. 여기 가변 길이의 음수 모양이 뒤에서 일치합니다.

내가 테스트하고있는 정규식 :

/(?<!apt|appt|appartment|ste|suite|box)[,.]? ?# ?([0-9]+)$/i 

정규식이 경우 실패 :

123 W Somewhere St # 321 

:

123 W Somewhere St Apt # 321 

정규식이의 일치를 찾아야한다 그러나 위의 두 가지와 일치합니다.

[,.]? ?# ?을 간단히 #으로 변경하면 작동하는 것으로 나타났습니다.

그러나 이는 단순히 공백을 제거하거나 주소에 마침표를 추가하면 해제됩니다.

내 부정적인 모양새를 사용하고이 인스턴스에서 정규 표현식을 유연하게 유지하려면 어떻게해야합니까?

PHP 5.3에서 구현되었습니다.

답변

1

당신은 (후 선택 내용)이 상황에서 lookbehind을 사용할 수 없지만이 대체 사용할 수 있습니다

/(?!\b(?:apt|appt|appartment|ste|suite|box))\b\w+[,.]? ?# ?\K[0-9]+/i 

\K

전에 모든 경기를 다시 설정합니다.

+0

작동하지만 preg_replace()에서 # 기호를 사용할 때 # 기호를 대체 할 수 없습니다. – eComEvo

+0

@EcomEvo :'# '앞에'\ K'을 옮기십시오. –

관련 문제