PHP preg_replace();

PHP preg_replace();,php,regex,Php,Regex,PHP中的regexp函数preg_replace()有问题。 我想从html的输入中获取viewstate,但它不能正常工作 此代码: $viewstate = preg_replace('/^(.*)(<input\s+id="__VIEWSTATE"\s+type="hidden"\s+value=")(.*[^"])("\s+name="__VIEWSTATE">)(.*)$/u','^\${3}$',$html); 编辑:对不起,我把这个问题留了很长时间。最后,我使用了D

PHP中的regexp函数preg_replace()有问题。 我想从html的输入中获取viewstate,但它不能正常工作

此代码:

$viewstate = preg_replace('/^(.*)(<input\s+id="__VIEWSTATE"\s+type="hidden"\s+value=")(.*[^"])("\s+name="__VIEWSTATE">)(.*)$/u','^\${3}$',$html);

编辑:对不起,我把这个问题留了很长时间。最后,我使用了DOMDocument。

您应该只在计划使用数据时进行捕获。因此,大多数()在该regexp模式中已过时。这不是失败的原因,但我想我应该提一下

您可以使用非贪婪修饰符-
,而不是使用[^“]来标记您不需要该字符。这将确保模式尽可能少地匹配。由于在值后面有
name=“\uu VIEWSTATE”
,因此这应该是安全的

让我们将其付诸实践,并简化一些模式。这可以根据您的需要工作:

'/.*<input\s+id="__VIEWSTATE"\s+type="hidden"\s+value="(.+?)"\s+name="__VIEWSTATE">.*/'
'/.*/'

我会检查DOM操作。这可以确保如果属性的顺序发生变化,代码也能正常工作。另外,使用它会更好。

您应该只在计划使用数据时进行捕获。因此,大多数()在regexp模式中已过时。这不是失败的原因,但我想我会提到它

您可以使用非贪婪修饰符-
,而不是使用[^“]来标记您不需要该字符。这将确保模式尽可能少地匹配。由于该值后面有
name=“\uu VIEWSTATE”
,因此这应该是安全的

让我们将其付诸实践,并将模式简化一些。这可以根据您的需要工作:

'/.*<input\s+id="__VIEWSTATE"\s+type="hidden"\s+value="(.+?)"\s+name="__VIEWSTATE">.*/'
'/.*/'

我将签出DOM操作。这可以确保如果属性的顺序发生变化,代码也能正常工作。另外,与之合作会更好。

可以肯定的是,我将这场比赛分为两个阶段:

  • 查找相关的输入元素
  • 获取值
  • 因为您无法确定元素中的属性顺序

    if(preg_match('/<input[^>]+name="__VIEWSTATE"[^>]*>/i', $input, $match))
        $value = preg_replace('/.*value="([^"]*)".*/i', '$1', $match[0]);
    
    if(preg_match('/]+name=“__VIEWSTATE”[^>]*>/i',$input,$match))
    $value=preg_replace('/.*value=“([^”]*)”*/i'、'$1'、$match[0]);
    

    当然,总是考虑和超过正则表达式来解析HTML/XML.< /P>

    以确保将这个匹配分为两个阶段:

  • 查找相关的输入元素
  • 获取值
  • 因为您无法确定元素中的属性顺序

    if(preg_match('/<input[^>]+name="__VIEWSTATE"[^>]*>/i', $input, $match))
        $value = preg_replace('/.*value="([^"]*)".*/i', '$1', $match[0]);
    
    if(preg_match('/]+name=“__VIEWSTATE”[^>]*>/i',$input,$match))
    $value=preg_replace('/.*value=“([^”]*)”*/i'、'$1'、$match[0]);
    

    当然,总是考虑和超过正则表达式来解析HTML/XML。

    主要的错误是使用函数<代码> PREGGRESUT/<代码>,女巫返回主题——既不是匹配模式也不是替换。感谢您的想法和文档的推荐。m93a


    主要错误是使用了function
    preg\u replace
    ,witch返回主题-既不返回匹配的模式也不返回替换。感谢您的想法和文档的推荐。m93a


    可能重复的我只想知道,为什么它不起作用:(可能重复的我只想知道,为什么它不起作用:(我可以确定,因为值是唯一会改变的东西:)但是谢谢。我可以确定,因为值是唯一会改变的东西:)但是谢谢。它仍然不起作用——我会找到另一种方法。谢谢:)还是不行-我会找到另一种方法的。谢谢:)