php在mysql_real_escape_string之后用引用文本爆炸字符串

时间:2011-06-10 20:15:38

标签: php regex

  

可能重复:
  PHP explode the string, but treat words in quotes as a single word.

我有带引号的带引号的字符串。任何人都可以给我正则表达式来解决这个问题。

this has a \\\'quoted sentence\\\' inside

报价也可以是单引号。我正在使用preg_match_all。

现在这个

preg_match_all('/\\\\"(?:\\\\.|[^\\\\"])*\\\\"|\S+/', $search_terms, $search_term_set);

Array
(
    [0] => Array
        (
            [0] => this
            [1] => has
            [2] => a
            [3] => \\\"quoted
            [4] => sentence\\\"
            [5] => inside
        )

)

我想要这个输出

Array
(
    [0] => Array
        (
            [0] => this
            [1] => has
            [2] => a
            [3] => \\\"quoted sentence\\\"
            [4] => inside
        )

)

这不是这个问题的重复。 PHP explode the string, but treat words in quotes as a single word

更新:

我删除了mysql_real_escape_string。我现在需要什么样的正则表达式我只是使用魔术引号。

3 个答案:

答案 0 :(得分:1)

我想你可能想在这种情况下使用strpossubstr

这非常草率,但希望你至少得到一般的想法。

$string = "This has a 'quoted sentence' in it";




   // get the string position of every ' " and space
    $n_string = $string;  //reset n_string
    while ($pos = strpos("'", $n_string)) {
      $single_pos_arr[] = $pos;
      $n_string = substr($n_string, $pos);
    }
    $n_string = $string;  //reset n_string
    while ($pos = strpos('"', $n_string)) {
      $double_pos_arr[] = $pos;
      $n_string = substr($n_string, $pos);
    }
    $n_string = $string;  //reset n_string
    while ($pos = strpos(" ", $n_string)) {
      $space_pos_arr[] = $pos;
      $n_string = substr($n_string, $pos);
    }

获得职位后,您可以编写一个简单的算法来完成工作。

答案 1 :(得分:0)

为什么输入字符串中有斜杠?

使用stripslashes摆脱它们。

然后编写自己的标记生成器或使用此正则表达式:

preg_match_all("/(\"[^\"]+\")|([^\s]+)/", $input, $matches)

答案 2 :(得分:0)

评论太长了,即使它实际上是评论。

我不明白它是如何重复的,使用该链接中的原则并用三重黑色引号替换引号:

$text = "this has a \\\\\'quoted sentence\\\\\' inside and then \\\\\'some more\\\\\' stuff";
print $text; //check input
$pattern = "/\\\{3}'(?:[^\'])*\\\{3}'|\S+/";
preg_match_all($pattern, $text, $matches);
print_r($matches);

你得到了你需要的东西。这几乎是您发布的链接的100%副本,唯一的变化就是那个人想要更改分隔符的建议。

编辑:这是我的输出:

Array
(
    [0] => Array
        (
            [0] => this
            [1] => has
            [2] => a
            [3] => \\\'quoted sentence\\\'
            [4] => inside
            [5] => and
            [6] => then
            [7] => \\\'some more\\\'
            [8] => stuff
        )

)

Edit2:你是在3个斜杠后检查单引号还是双引号(如果你所做的只是匹配,你的输入和输出数组不匹配),或者你输入三个斜杠后的三个斜杠后改变单引号产出报价?如果您所做的只是匹配,只需更改模式中的两个单引号以转义双引号或用单引号括起模式,这样您就不必转义双引号。