Php / Regex获取一组双引号之间的内容

时间:2011-08-23 07:32:41

标签: php regex

更新我的问题: 我的总体目标是将字符串拆分为4个部分,以后可以访问。

  1. =
  2. 第一个和最后一个“”
  3. 中的html结果

    以下是我正在尝试做的一个例子:

    //我的字符串(这是动态的,会改变,这只是一个例子)

    $string = 'value="<p>Some text</p> <a href="#">linky</a>"';
    

    //运行匹配并吐出结果

    preg_match_all('/([^"]*)(?:\s*=\s*(\042|\047))([^"]*)/is', $string , $results);
    

    //这是我想要结束的数组

    Array
    (
    [0] => Array
        (
            [0] => value="<p>Some text</p><a href="#">linky</a>"
        )
    
    [1] => Array
        (
            [0] => value
        )
    
    [2] => Array
        (
            [0] => "
        )
    
    [3] => Array
        (
            [0] => <p>Some text</p><a href="#">linky</a>
        )
    )
    

    基本上链接上的双引号会给我带来一些麻烦,所以我的第一个就是做[^“] $或其他东西让它直到最后一个双引号,但这不会让我到任何地方。我的想法可能是在PHP中处理字符串以删除任何内部引号,但我也不确定是否也要这样做。

    希望我很清楚,已经很晚了,而且我已经这么久了!

4 个答案:

答案 0 :(得分:0)

如果您不打算稍微更改一下html,可以试试这个:

$string = 'value="<p>Some text</p> <a href=\'#\'>linky</a>"';

答案 1 :(得分:0)

在这种情况下,您可以使用:

$string = 'value="<p>Some text</p> <a href="#">linky</a>"';
echo substr( $string, 7, -1 ); //<p>Some texts</p> <a href="#">linky</a>

答案 2 :(得分:0)

你不能这样做,因为你不知道哪个引号标记了要匹配的字符串的结尾以及应该包含哪个(特别是当值中有可变数量的引号,并且在串)。为什么引号内有引号呢?这些数据来自哪里?

$string = 'value="<p>Some text</p> <a href="#">linky</a>"';

对我来说似乎很奇怪。

答案 3 :(得分:0)

试试这个正则表达式

$string = 'value="<p>Some text</p> <a href="#">linky</a>"';
$regex = '/([^"]*)(?:\s*=\s*(?:\042|\047))(.*)(?:\042|\047)(?:[^"]*)/is';
preg_match_all($regex, $string , $results);

它给出了以下结果。

Array(3) {
  [0]=>
  Array(1) {
    [0]=>
    string(46) "value="<p>Some text</p> <a href="#">linky</a>""
  }
  [1]=>
  Array(1) {
    [0]=>
    string(5) "value"
  }
  [2]=>
  Array(1) {
    [0]=>
    string(38) "<p>Some text</p> <a href="#">linky</a>"
  }
}

此致