정규식 패턴을 적용하기 전에 이스케이프 할 수있는 PHP 함수가 있습니까?
C # Regex.Escape()
함수 의 선을 따라 무언가를 찾고 있습니다.
답변
preg_quote()
당신이 찾고있는 것입니다 :
기술
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote () 는
str
정규 표현식 구문의 일부인 모든 문자 앞에 백 슬래시를 사용합니다. 일부 텍스트에서 일치해야하는 런타임 문자열이 있고 문자열에 특수 정규식 문자가 포함될 수있는 경우에 유용합니다.특수 정규식 문자는 다음과 같습니다.
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
매개 변수
str
입력 문자열
구분자
선택적 분리 문자가 지정되면 이스케이프됩니다. 이것은 PCRE 기능에 필요한 분리 문자를 이스케이프 처리하는 데 유용합니다. /는 가장 일반적으로 사용되는 구분 기호입니다.
중요하게, $delimiter
인수를 지정하지 않으면 정규식을 묶는 데 사용되는 문자 인 구분 기호 (일반적으로 슬래시 ( /
))가 이스케이프되지 않습니다. 일반적으로 정규식과 함께 사용하는 구분 기호를 $delimiter
인수 로 전달하려고합니다 .
예- preg_match
공백으로 둘러싸인 주어진 URL을 찾는 데 사용 :
$url = 'http://stackoverflow.com/questions?sort=newest';
// preg_quote escapes the dot, question mark and equals sign in the URL (by
// default) as well as all the forward slashes (because we pass '/' as the
// $delimiter argument).
$escapedUrl = preg_quote($url, '/');
// We enclose our regex in '/' characters here - the same delimiter we passed
// to preg_quote
$regex = '/\s' . $escapedUrl . '\s/';
// $regex is now: /\shttp\:\/\/stackoverflow\.com\/questions\?sort\=newest\s/
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
preg_match($regex, $haystack, $matches);
var_dump($matches);
// array(1) {
// [0]=>
// string(48) " http://stackoverflow.com/questions?sort=newest "
// }
답변
T-Regx 라이브러리 에서 준비된 패턴 을 사용하는 것이 훨씬 안전합니다 .
$url = 'http://stackoverflow.com/questions?sort=newest';
$pattern = Pattern::prepare(['\s', [$url], '\s']);
// ↑ $url is quoted
그런 다음 정상적인 t-regx 일치 를 수행하십시오 .
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
$matches = $pattern->match($haystack)->all();