나는 정규 표현식에 대해 조금 배우려고하고있다. 아무도 나에게 여기서 무슨 일이 일어나는지 설명 할 수 있을까? 예상 출력을 제공하는 정규식 예제를 제공 하시겠습니까? 감사!왜이 욕심이 많은 정규 표현식이 예상대로 작동하지 않습니까?
preg_filter("(.*)?\|?.*", "$1", 'Sometext|even more text'); // returns Sometext|even more text
나는 정규 표현식에 대해 조금 배우려고하고있다. 아무도 나에게 여기서 무슨 일이 일어나는지 설명 할 수 있을까? 예상 출력을 제공하는 정규식 예제를 제공 하시겠습니까? 감사!왜이 욕심이 많은 정규 표현식이 예상대로 작동하지 않습니까?
preg_filter("(.*)?\|?.*", "$1", 'Sometext|even more text'); // returns Sometext|even more text
(.*)
input data = 'Sometext|even more text'
regex = '(.*)?\|?.*'
replacement = '$1'
expected output = 'Sometext'
actual output = 'Sometext|even more text'
PHP 그래서 모든 것을 일치 욕심이다. 그러면 $1
이 전부입니다. 귀하의 정규식 "0 개 이상의 문자 다음에 선택적인 |
다음에 모든 문자를,"말하는
/^([^|]*).*$/
:
당신은 아마 찾고 있습니다.
(.*)
을 ([^\|]*)
으로 변경하거나 |
을 선택 사항이 아닌 것으로 변경하십시오.
*
은 욕심이 많습니다. 가능한 한 많은 텍스트를 검색하려고합니다. 이 경우 :
(.*)?
는 모든 텍스트와 일치합니다\|?.*
일치하는 것 "휴식"(빈 문자열)시도 :
당신이 (\w+)?\|?.*
에 정규식을 변경하는 경우 regex = '\|[^|]*', replacement = ''
특히 \w
다음에 +
을 추가하면 'Sometext'에 대한 예상 답변을 얻을 수 있습니다.
전체 문자열 일치가 발생한 이유는 첫 번째 .*
이 전체 문자열과 일치했기 때문입니다. 위의 변경 사항을 적용하면 모든 단어의 문자와 일치하게됩니다.
PHP 코드도 함께 보내주십시오. – hakre
'\ |? '는 세로 막대를 선택적으로 만듭니다. – nickb