PHP preg_replace();
PHP中的regexp函数preg_replace()有问题。 我想从html的输入中获取viewstate,但它不能正常工作 此代码: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
$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
可能重复的我只想知道,为什么它不起作用:(可能重复的我只想知道,为什么它不起作用:(我可以确定,因为值是唯一会改变的东西:)但是谢谢。我可以确定,因为值是唯一会改变的东西:)但是谢谢。它仍然不起作用——我会找到另一种方法。谢谢:)还是不行-我会找到另一种方法的。谢谢:)