匹配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>
标签。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...