[英]Regex for find multiline form data (php)
我尝试(没有成功)制作一个用于查找提交按钮的正则表达式,即使按钮代码在一两行或更多行中也是如此。
我现在用这个模式
/<(button|input)(.*type=['\\"](submit|button)['\\"].*)?>/i
如果按钮代码在一行中,效果很好
<input type="submit" name="mybutton" class="button_class" value="Submit" title="Click Me" />
如果我的按钮代码如下所示,我想使其正常工作
<input type="submit" name="mybutton"
class="button_class" value="Submit"
title="Click Me" />
谢谢
添加s
(不是m
)作为修饰符 :
/<(button|input)(.*type=['\"](submit|button)['\"].*)?>/is
s(PCRE_DOTALL)
如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。 没有它,换行符将被排除。 此修饰符等效于Perl的/ s修饰符。 否定类(例如[^ a])始终与换行符匹配,而与该修饰符的设置无关。
米(PCRE_MULTILINE)
默认情况下,PCRE将主题字符串视为由单个“行”字符组成(即使实际上包含多个换行符)。 “行首”元字符(^)仅在字符串的开头匹配,而“行尾”元字符($)仅在字符串的末尾或终止换行符之前匹配(除非设置了D修饰符) )。 这与Perl相同。 设置此修饰符后,“行首”和“行尾”结构分别与主题字符串中的任何换行符紧接或紧接相匹配,也恰好位于开头和结尾。 这等效于Perl的/ m修饰符。 如果主题字符串中没有“ \\ n”字符,或者在模式中没有出现^或$,则设置此修饰符无效。
不要使用正则表达式来解析HTML。
学习xpath,并使用解析器。
编辑添加一些代码之前插入。
$dom = new DOMDocument();
@$dom->loadHTML($html);
$x = new DOMXPath($dom);
foreach($x->query("//input[@type='submit']") as $node)
{
$newNode = $dom->createElement("img");
$newNode->setAttribute("src","/loading.gif");
$node->insertBefore($node);
}
$output = $dom->saveHTML();
在正则表达式的末尾添加/s
到make .
匹配任何字符,包括换行符。
将贪婪.*
更改为懒惰.*?
也是一个好主意.*?
为了阻止它匹配HTML的整个块。
仍然不建议使用正则表达式来解析HTML。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.