Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何为regexp重写这个方便的转义特殊字符函数_Php_Regex - Fatal编程技术网

Php 如何为regexp重写这个方便的转义特殊字符函数

Php 如何为regexp重写这个方便的转义特殊字符函数,php,regex,Php,Regex,根据这一点,在任何正则表达式中,我都需要在字符类之外转义这些字符 .^$*+?()[{\| 我有以下资料: $search = "App::uses('Controller', 'Controller');"; $replace = $search . "\nApp::uses('CrudControllerTrait', 'Crud.Lib');"; $escaped_search = escape_special_characters($search); $patterns = arr

根据这一点,在任何正则表达式中,我都需要在字符类之外转义这些字符

.^$*+?()[{\|
我有以下资料:

$search = "App::uses('Controller', 'Controller');";

$replace = $search . "\nApp::uses('CrudControllerTrait', 'Crud.Lib');";
$escaped_search = escape_special_characters($search);

$patterns = array('/' . $escaped_search . '/');
$replacements = array($replace);
$file_contents = preg_replace($patterns, $replacements, $file_contents);
preg\u replace
将失败,因为我需要在
$search
变量中转义

这就是为什么我有这个功能:

function escape_special_characters($search) {
  $special_characters = array(
    ".", "^", "$", 
    "*", "+", "?",
    "(", ")", "[",
    "{", "|", "\\"
  );

  $character_array = str_split($search);
  $string_array = array();
  foreach ($character_array as $character) {
    if (in_array($character, $special_characters)) {
      $string_array[] = "\\";
    }
    $string_array[] = $character;
  }

  return implode("", $string_array);

}
我的问题是除了我的
特殊字符转义
功能之外,是否还有更好的方法来实现这一点?

========================================================================

一些背景:

为什么我要像上面那样编写代码?


我的目的是查找行
App::uses('Controller','Controller');
并在它之后编写行
App::uses('CrudControllerTrait','Crud.Lib');

您不需要创建一个函数来转义模式中的“丑陋的十几个”字符

有两种方法可以做到这一点:

$pattern = '~' . preg_quote($search, '~') . '~'; // to escape special characters and the delimiter


但是,我不明白为什么要使用
preg\u replace()
函数而不是
str\u replace()
函数,因为您似乎在查找文字字符串。

preg\u quote是否对您不起作用?您还应该为preg\u quote提供分隔符,以确保它在您的情况下正确处理$pattern='~'。preg\u quote($search,“~”).~;@JesperBunnyJensen:谢谢!我不知道有可能做到这一点!
$pattern = '~\Q' . $search . '\E~'; // to ignore special characters