Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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/Regex在一组双引号之间获取内容_Php_Regex - Fatal编程技术网

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

Php/Regex在一组双引号之间获取内容,php,regex,Php,Regex,更新我的问题: 我的总体目标是将字符串分成4个部分,以后可以访问 价值观 = " 第一个和最后一个“”中html的结果 下面是我尝试做的一个例子: //我的字符串(这是动态的,将更改,这只是一个示例) //这是我想要结束的数组 Array ( [0] => Array ( [0] => value="<p>Some text</p><a href="#">linky</a>" ) [1] => A

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

  • 价值观
  • =
  • "
  • 第一个和最后一个“”中html的结果
  • 下面是我尝试做的一个例子:

    //我的字符串(这是动态的,将更改,这只是一个示例)

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

    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>
        )
    )
    
    数组
    (
    [0]=>阵列
    (
    [0]=>value=“一些文本”
    )
    [1] =>阵列
    (
    [0]=>值
    )
    [2] =>阵列
    (
    [0] => "
    )
    [3] =>阵列
    (
    [0]=>一些文本

    ) )
    基本上,链接上的双引号给我带来了一些麻烦,所以我的第一个想法是执行[^“]$或其他操作,让它一直运行到最后一个双引号,但这并没有让我取得任何进展。我的另一个想法是可能在PHP中处理字符串以去掉任何内部引号,但我也不确定该怎么做


    希望我能说清楚,现在已经很晚了,而且我已经做了太长时间了!

    如果您不费心修改html,您可以尝试以下方法:

    $string = 'value="<p>Some text</p> <a href=\'#\'>linky</a>"';
    
    $string='value=“一些文本”

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

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

    ”; echo substr($string,7,-1);//一些文本
    您不能这样做,因为您不知道哪个引号标记要匹配的字符串的结尾,以及应该包括哪些引号(特别是当值中有可变数量的引号,并且字符串中有多个匹配时)。引号中怎么会有引号?这些数据来自哪里

    $string = 'value="<p>Some text</p> <a href="#">linky</a>"';
    
    $string='value=“一些文本”

    ”;
    我觉得很奇怪。

    试试这个正则表达式

    $string='value=“一些文本”

    ”; $regex='/([^“]*)(?:\s*=\s*(?:\042 |\047))(.*)(?:\042 |\047)(?:[^“]*)/is'; preg_match_all($regex,$string,$results);
    它给出了以下结果

    数组(3){
    [0]=>
    阵列(1){
    [0]=>
    字符串(46)“value=“某些文本”
    }
    [1]=>
    阵列(1){
    [0]=>
    字符串(5)“值”
    }
    [2]=>
    阵列(1){
    [0]=>
    字符串(38)“某些文本”
    }
    }
    

    真诚地说

    不幸的是,输入的html是动态的,因此我无法控制内部引号。我不太熟悉substr,但它似乎只适用于此示例。让我更新我的问题,说明输入的字符串是动态的,可能会更改!当字符串以«val开头时,这将适用于类似示例ue=“»并以«结尾"». 也就是说,第一个和最后一个引号之间可以是任何字符。更新了我的问题,提供了更多信息,谢谢!在继续之前,请阅读以下内容:;-)除非您能够解释在什么情况下您可以知道双引号不会终止双引号字符串,否则就不太可能得到好的答案。也许当你在一个HTML标签里面的时候?同意正则表达式并不是一个好的解决方案(你会陷入另一个你没有想到的错综复杂的困境)。好吧,我想我没有抓住要点。我有这个问题,因为内部引号终止了外部引号。所以我的最佳解决方案是,在外部引号中转义或删除任何双引号?有没有办法做到这一点,或者我遗漏了什么,更重要的一点:)是的,我没想清楚。除非被转义,否则不应该在其他双引号中包含双引号。我得重新考虑一下。
    $string = 'value="<p>Some text</p> <a href="#">linky</a>"';
    echo substr( $string, 7, -1 ); //<p>Some texts</p> <a href="#">linky</a>
    
    $string = 'value="<p>Some text</p> <a href="#">linky</a>"';
    
    $string = 'value="<p>Some text</p> <a href="#">linky</a>"';
    $regex = '/([^"]*)(?:\s*=\s*(?:\042|\047))(.*)(?:\042|\047)(?:[^"]*)/is';
    preg_match_all($regex, $string , $results);