【问题标题】:Inverse of preg_quote in PHPPHP中preg_quote的逆
【发布时间】:2012-02-07 08:10:48
【问题描述】:

我需要编写一个与 preg_quote 函数完全相反的函数。简单地删除所有“\”是行不通的,因为字符串中可能有一个“\”。

示例;

inverse_preg_quote('an\\y s\.tri\*ng') //this should return "an\y s.tri*ng" 

或者你可以测试为

inverse_preg_quote(preg_quote($string)) //$string shouldn't change

【问题讨论】:

    标签: php regex inverse


    【解决方案1】:

    你正在寻找stripslashes

    <?php
        $str = "Is your name O\'reilly?";
    
        // Outputs: Is your name O'reilly?
        echo stripslashes($str);
    ?>
    

    请参阅http://php.net/manual/en/function.stripslashes.php 了解更多信息。 (还有更多功能的 http://www.php.net/manual/en/function.addcslashes.phphttp://www.php.net/manual/en/function.stripcslashes.php 你可能想研究一下)

    编辑:否则,您可以进行三个 str_replace 调用。第一个用例如替换 \\ $DOUBLESLASH,然后将 \ 替换为 ""(空字符串),然后将 $DOUBLESLASH 设置回 \。

    $str = str_replace("\\", "$DOUBLESLASH", $str);
    $str = str_replace("\", "", $str);
    $str = str_replace("$DOUBLESLASH", "\", $str);
    

    请参阅http://php.net/manual/en/function.str-replace.php 了解更多信息。

    【讨论】:

      【解决方案2】:

      来自manual

      特殊的正则表达式字符是: . \ + * ? [ ^ ] $ ( ) { } = ! | :-

      您可以编写一个函数,将\ 后面的每个上述字符替换为字符本身。应该很容易:

      function inverse_preg_quote($str)
      {
          return strtr($str, array(
              '\\.'  => '.',
              '\\\\' => '\\',
              '\\+'  => '+',
              '\\*'  => '*',
              '\\?'  => '?',
              '\\['  => '[',
              '\\^'  => '^',
              '\\]'  => ']',
              '\\$'  => '$',
              '\\('  => '(',
              '\\)'  => ')',
              '\\{'  => '{',
              '\\}'  => '}',
              '\\='  => '=',
              '\\!'  => '!',
              '\\<'  => '<',
              '\\>'  => '>',
              '\\|'  => '|',
              '\\:'  => ':',
              '\\-'  => '-'
          ));
      }
      $string1 = '<title>Hello (World)?</title>';
      $string2 = inverse_preg_quote(preg_quote($string1));
      echo $string1 === $string2;
      

      【讨论】:

        【解决方案3】:

        您可以使用专用的T-Regx library

        Pattern::unquote('an\\y s\.tri\*ng'); // 'any s.tri*ng'
        

        【讨论】:

          猜你喜欢
          • 2011-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多