[php] 정규식 패턴을 적용하기 전에 이스케이프 할 수있는 PHP 함수가 있습니까?

정규식 패턴을 적용하기 전에 이스케이프 할 수있는 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();


답변