2011-09-25 2 views
1

PHP PCRE 정규 표현식을 사용하여 부품의 양쪽이 발생할 수도 있고 그렇지 않을 수도있는 문자열의 가운데 부분을 추출하려고합니다. 나는.정규 표현식을 사용하여 문자열 가운데에서 비트를 추출하는 방법

n bedroom property type in some town 

하나의 정규 표현식을 사용하여 '속성 유형'을 추출하고 싶습니다. 나는 부동산 유형에 대한 모든 가능성을 알지 못하지만 시작 비트 (항상 '\ d 침실')와 끝 비트 (항상 '일부 타운'에 있음)는 일관성이 있습니다. 또한 시작 비트 또는 종료 비트 (또는 둘다)가 없을 수도 있습니다.

e.e. 주제 문자열은

6 bedroom ground floor flat in Edinburgh 

house in Manchester 

3 bedroom apartment 

그래서 각각 '층 평면', '집'과 '아파트'를 추출 할 ... 중 하나가 될 수 있습니다. (아주 일을하지 않는)이 같은

뭔가 ....

(\s*\d+\s+bedrooms?\s*)?(.*?)(\s+in)? 
+3

"각각 하나의 정규 표현식." --- 왜 간단하고 유지하기 쉬운 몇 가지 대신에 하나의 추악하고 복잡한 정규식을 원하십니까? – zerkms

+0

프레임 워크의 일부로 임의의 PHP 코드를 작성할 수 없습니다. 정규식은 하나의 정규식 만 허용하는 구문 분석기로 공급됩니다. – spiderplant0

답변

4

이 정규식에 앵커를 추가하고 첫 번째 개미 마지막 그룹을 선언 예는 캡처되지 수 :

/^(?:\s*\d+\s+bedrooms?\s*)?(.*?)(?:\s+in\s.*)?$/ 
+0

그 덕분에 완벽하게 작동했습니다. – spiderplant0

1

#(((?<bedroomCount>\d+)\s+bedroom)\s+)?(?<type>.+?)\s(in\s+(?<city>\w+))?\n#i 작품은 생각하지만 당신은 여분의 줄 바꿈 광고를 테스트 문자열의 끝이 필요합니다.

here

+0

고마워요 3on,하지만 나는 그것을 작동시키지 않습니다. 나는 어떤 종류의 regExp이 있는지 알아 내지 못한다 : (? <침실 번호> – spiderplant0

+0

'(? ) 이것은 성냥에 이름을 부여하는 방법으로 나중에 쉽게 사용할 수있다. 모든 PHP 버전이 지원하지는 않는다. – 3on