2016-07-27 6 views
0

다음은 PHP이지만 정규 표현식은 자바 스크립트에서도 사용됩니다.PHP/자바 스크립트의 문자열에서 반복 패턴을 추출하려고 시도합니다.

문자열 중 하나가 될 수있는 문자열에서 반복 패턴을 추출하려고

다음과 일치하지 않는 올바르게 /^D([0-9]{3})(?:\|([^\|]+))*/

이 :

"something arbitrary" 
"D123" 
"D111|something" 
"D197|what.org|when.net" 
"D297|who.197d234.whatever|when.net|some other arbitrary string" 

나는 현재 다음과 같은 정규식을 사용하고 있습니다 첫 번째 문자열은 두 번째 및 세 번째 문자열과 정확하게 일치합니다. 문제는 세 번째와 네 번째는 Dxxx와 마지막 문자열 만 일치시킵니다. 나는 '|'사이에 각각의 문자열이 필요하다. 일치시킬 수 있습니다.

정규 표현식을 사용하여 단일 단계로 사용하기를 바라고 있습니다. 내가 Dxxx를 발견 한 후 폭발을 사용하거나 문자열을 분리하기 위해 적절하게 분할 할 수 있다는 것을 알았습니다. 나는 하나의 정규 표현식 매치 스텝을 원한다.

이 정규 표현식을 파이썬에서도 사용할 수 있으므로 일반적인 정규 표현식 솔루션을 원합니다.

답변

0

정규 표현식에 동적 캡처 그룹을 포함시킬 방법이 없지만 한 문자열에 몇 개의 부분이 있는지에 대한 몇 가지 상한을 알고 있다면 그 패턴을 여러 번 반복하면됩니다.

/^D([0-9]{3})(?:$|\|)(.*?)(?:$|\|)(.*?)(?:$|\|)(.*?)(?:$|\|)(.*?)(?:$|\|)/ 

따라서 ^D([0-9]{3})(?:$|\|)의 첫 글자 뒤에는 필요한만큼 번만 (.*?)(?:$|\|)을 반복하면됩니다.

문자열의 요소 수가 적 으면 나머지 캡처 그룹은 빈 문자열과 일치합니다.

regex tester을 참조하십시오.

0

preg_match_all() (글로벌 검색의 PHP 변형)도 사용할 수 있습니까?

은 그럼 당신은 사용할 수 있습니다 : 이것은 다른 경기, 예를 들어, 문자열에서 모든 일치합니다

^(?|D([0-9]{3})|^.+$|(?!^)\|([^|\n]*)(?=\||$)) 

(. 녹색 모든 것을 그룹 경기입니다 파란색으로 무엇을 무시합니다.) https://regex101.com/r/jL2oX6/4

을 : 라이브 실행

D197 
what.org 
when.net 

: 그것은 당신이 다음 3 경기를 줄 것이다

D197|what.org|when.net 

: 당신의 문자열을

관련 문제