繁体   English   中英

正则表达式,用于查找多行表单数据(php)

[英]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。

RegEx匹配XHTML自包含标签以外的打开标签

学习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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM