PHP 정규식의 전방 탐색
때때로 이런 유형의 문제를 해결해야 할 때가 있습니다:
문자열 'aaa'를 찾아서 '!'로 바꾸되,
'aaa' 뒤에 'x'가 있을 때만,
그리고 'x' 자체는 바꾸지 않아야 합니다.
만약 우리가 이 문제를 '직접' 해결하려고 하면,
성공하지 못할 것입니다:
<?php
preg_replace('#aaax#', '!', 'aaax'); // 결과는 '!', 그러나 '!x'가 되어야 함
?>
이 문제를 해결하려면, 'x'를 바꾸지 않아야
한다는 것을 말할 수 있는 방법이 필요합니다.
이것은 특별한 괄호 (?= )를 사용하여 수행되며,
이 괄호는 단순히 확인만 하고 소비하지는 않습니다.
이 괄호를 긍정형 전방 탐색이라고 합니다.
긍정형 - 왜냐하면 'x'(우리의 경우)가 있어야만
- 그때 교체가 발생하기 때문입니다.
우리의 문제를 해결하기 위해 이 괄호를 적용해 봅시다:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // '!x'를 반환함
?>
부정형 전방 탐색도 있습니다
- (?! ) - 이것은 반대로, 어떤 것이
없어야 한다고 말합니다. 다음 예제에서는
'aaa' 뒤에 'x'가 없을 때만
교체가 발생합니다:
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // '!b'를 반환함
?>
함수 이름을 포함하는 문자열이 주어집니다:
<?php
$str = 'func1() func2() func3()';
?>
문자열에서 함수 이름들의 배열을 얻으세요.
태그가 있는 문자열이 주어집니다:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
이 태그의 속성 이름들의 배열을 얻으세요.