aibicidieif
(더 복잡한 문자열이지만 비슷한 형식 임) (?<=i).*?(?=i)
과 같은 정규식을 사용했지만 첫 번째 및 마지막 요소 a
및 f
을 캡처하지 않았습니다.regex에서 선택적 어설 션을 만드는 방법은 무엇입니까?
i
구분 기호 사이의 모든 것을 원하지만 정규식은 그 전후에 i
문자 만 검색합니다. (?=i)
및 (?<=i)
을 선택적으로 만들 수있는 방법이 있습니까?
aibicidieif
(더 복잡한 문자열이지만 비슷한 형식 임) (?<=i).*?(?=i)
과 같은 정규식을 사용했지만 첫 번째 및 마지막 요소 a
및 f
을 캡처하지 않았습니다.regex에서 선택적 어설 션을 만드는 방법은 무엇입니까?
i
구분 기호 사이의 모든 것을 원하지만 정규식은 그 전후에 i
문자 만 검색합니다. (?=i)
및 (?<=i)
을 선택적으로 만들 수있는 방법이 있습니까?
어떤 언어를 사용하고 있습니까? 대부분의 언어에서 당신은 파이썬에서, 예를 들어, 정규식을 사용하여 문자열을 분할 할 수 있습니다 :
다음r'i'
>>> re.split(r'i', 'aibicidieifi')
['a', 'b', 'c', 'd', 'e', 'f', '']
은 더 복잡한 정규식이 무엇이든 나타내는 문자열로 대체 할 수있다.
은 또한이 같은 것을 할 수있는 다음 내다에 교대로 앵커를 추가
(?<=i|^).*?(?=i|$)
을 지금 여전히 시작과 문자열의 끝 문자와 일치하는 것입니다 당신을 lookbehind 그러나 일부 언어는 지원하지 않습니다 가변 길이 lookbehinds 그래서이 작동하지 않을 수 있습니다. ``(<= 내가?)가 난`앞에 것 "을 의미?
(?:(?<=i)|^).*?(?=i|$)
예 정규 표현식이 내가 찾고있는 것입니다. 나는 이것을 할 수있는 함수가 있음을 알고 있지만 순수한 정규식 솔루션을 찾고 있었다. – Ryder
단순히 [^i]+
는 일을하지 않을까요? 당신이
$valuesArray = explode('i', $input);
그런 다음 생성 된 배열에서 값에 액세스 단지 수행 될 그들을하고 있습니다로 입력 문자열과 구분 기호를 가정
는
이 경우 예, OP가 더 복잡 할 수 있다고 말 했으므로 현재 Lookbehind 및 Lookahead에있는 것은 아마도 단 한 문자가 아닙니다 . –
맞아. 맞아. –
로 간단합니다.
을 F.Müller @ :
언어는 가변 길이 lookbehinds를 지원하지 않는 경우, 여기에 여전히 작동합니다 대안입니다 ', 그렇지 않으면 "; 당신은 lookbehind를 제거 할 수도 있습니다 (그리고 lookaheads도 마찬가지입니다). 일부 정규 표현식은 정량화 된 어설 션을 구문 오류로 취급합니다. 그렇지 않은 경우도 그렇습니다. –
Btw, __does__를 제공 한 정규 표현식은'f'를 캡쳐합니다. – alan
내가 틀릴 수도 있지만 '?'연산자가 lookahead/behind 어쨌든 작동하지 않는다고 생각합니다. – alan