如何解决匹配html属性和php中的正则表达式
| 我正在尝试创建一个表达式,该表达式将搜索类似于how2bypass.co.cc的页面,并返回\“ form \”标记中\“ action \”属性的内容以及\“ name的内容任何输入标签中的\“和\” type \“属性。我无法使用html解析器,因为我的最终目标是自动检测给定的页面是否是Web代理,一旦网站被我发现,他们可能会开始做一些愚蠢的事情,例如用javascript编写整个文档,以阻止我对其进行解析。 我正在使用代码 preg_match_all(\'/<form.*action\\=\"(.*?)\".*>[^<]*<input.*type\\=/i\',$pageContents,$inputMatches);
哪个对action属性有效,但是一旦我在type \\ =之后加上\“,代码就会停止工作。这为什么?它可以工作一次,但不能工作两次?
解决方法
正则表达式很贪心...
如果检查页面源,则以下内容可能会匹配第一个ѭ1和最后一个ѭ2,并捕获它们之间的所有内容。
`<input.*type\\=`
您将无法使用当前表达式捕获表单和所有输入,因为并非每个输入都以表单标记为前缀。您需要采用以下方法之一进行处理:
捕获整个表单标记<form>...</form>
,然后捕获一个正则表达式以匹配捕获中的所有输入
将您的当前表达式调整为非贪心.*?
,并允许多次捕获输入标记。
, 在没有看到要提取的目标页面的情况下,只有几件事需要猜测:
type=
属性可能没有双引号,因为type=text
也有效。或者它可能带有单引号,或者在ѭ8周围有一些空格。
如果标记之间或标记内有换行符,则“ 9”占位符可能会失败。建议使用“ 10”正则表达式标志。
而且通常使用否定的字符类,例如[^<>]*
或[^\"]
而不是.*
更为可靠。
您无需逃脱ѭ14等号。
也许您应该将其拆分。使用一个正则表达式提取<form>..</form>
块。然后在其中搜索<input>
标签。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。