使用正则表达式解析HTML可能不是最好的方法.

您可以查看DOMDocument::loadHTML,这将允许您使用DOM方法处理HTML文档(例如,如果您知道这些,则使用XPath查询).

您可能还想看一下Zend_Dom和Zend_Dom_Query,顺便说一句,如果您可以在应用程序中使用Zend Framework的某些部分,这是非常好的.

例如,在使用Zend_Test进行功能测试时,它们用于从HTML页面获取数据 – 并且工作得很好;-)

首先看起来似乎更难……但是,考虑到一些HTML页面的混乱,它可能是一个更明智的想法……

在评论和编辑OP之后编辑

这里有几个想法,从“简单”开始,一个输入标签:

>它可以跨越几条线传播

>它可以有很多属性

>只考虑名称和价值是您感兴趣的,您必须处理这两个可能处于任何可能的顺序的事实

>属性可以包含双引号,单引号,甚至不包含其值

> tags / attributes可以是小写的也可以是大写的

>标签并不总是必须关闭

好吧,其中一些点无效 – HTML;但仍然在大多数公共网络浏览器中工作,所以必须考虑到它们……

只有这些点,我不想成为写正则表达式的人^^

但我想可能还有其他一些我没想过的困难.

另一方面,你有DOM和xpath …要获得输入名称=“q”的值(例如this page),这是一个类似这样的问题:

$url = 'http://www.google.fr/search?q=test&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a';

$html = file_get_contents($url);

$dom = new DOMDocument();

if (@$dom->loadHTML($html)) {

// yep, not necessarily valid-html...

$xpath = new DOMXpath($dom);

$nodeList = $xpath->query('//input[@name="q"]');

if ($nodeList->length > 0) {

for ($i=0 ; $ilength ; $i++) {

$node = $nodeList->item($i);

var_dump($node->getAttribute('value'));

}

}

} else {

// too bad...

}

重要的是什么? XPath查询,只有…并且它有什么静态/常量吗?

好吧,我说我想要所有< input>具有等于​​“q”的name属性.

它只是工作:我得到这个结果:

string 'test' (length=4)

string 'test' (length=4)

(我查了一下:页面上有两个输入名称=“q”^^)

我知道页面的结构吗?绝对没有;-)

我只知道我/你/我们想要名为q的输入标签;-)

这就是我们得到的;-)

编辑2:选择和选项有点乐趣:

好吧,只是为了好玩,这是我为选择和选项提出的:

$url = 'http://www.google.fr/language_tools?hl=fr';

$html = file_get_contents($url);

$dom = new DOMDocument();

if (@$dom->loadHTML($html)) {

// yep, not necessarily valid-html...

$xpath = new DOMXpath($dom);

$nodeListSelects = $xpath->query('//select');

if ($nodeListSelects->length > 0) {

for ($i=0 ; $ilength ; $i++) {

$nodeSelect = $nodeListSelects->item($i);

$name = $nodeSelect->getAttribute('name');

$nodeListOptions = $xpath->query('option[@selected="selected"]', $nodeSelect); // We want options that are inside the current select

if ($nodeListOptions->length > 0) {

for ($j=0 ; $jlength ; $j++) {

$nodeOption = $nodeListOptions->item($j);

$value = $nodeOption->getAttribute('value');

var_dump("name='$name' => value='$value'");

}

}

}

}

} else {

// too bad...

}

我得到一个输出:

string 'name='sl' => value='fr'' (length=23)

string 'name='tl' => value='en'' (length=23)

string 'name='sl' => value='en'' (length=23)

string 'name='tl' => value='fr'' (length=23)

string 'name='sl' => value='en'' (length=23)

string 'name='tl' => value='fr'' (length=23)

这是我的预期.

一些解释?

好吧,首先,我获取页面的所有选择标记,并将其名称保存在内存中.

然后,对于每一个,我得到选定的选项标签作为其后代(总是只有一个,顺便说一句).

在这里,我有价值.

比前面的例子复杂一点……但是仍然比正则表达式容易得多,我相信……花了我10分钟,而不是更多……我仍然没有勇气(疯狂?)开始想想某种能够做到这一点的突变正则表达式:-D

哦,作为旁注:我仍然不知道HTML文档的结构是什么样的:我甚至没有看过它的源代码^^

我希望这会有所帮助……

谁知道,也许我会说服你正则表达式在解析HTML时不是一个好主意……也许吧?

php表单提取,php – 使用RegEx提取表单字段相关推荐

  1. java从学号中提取班级_如何实现表间查询并提取班级号

    今天下午在整理学生模块成绩时,突然发现学生的模块成绩表中的班级是教学班,而发展报告是要求按行政班进行填写的.就有个问题了:如何按学籍号(因为发展报告只需要用学籍的学生填写),而现在就要把模块成绩表中的 ...

  2. 动态表单 mysql_【mysql】动态表单应该如何设计数据库?

    需求是这样的 在后台管理界面录入表单信息,规定有哪些表单 (可以增删) 在前端显示哪些表单的可以填写 最后把填写的表单(产生的真实数据)存入数据库 最后填入的数据需要能够方便查询,排序,过滤的数据 我 ...

  3. php表单验证_用PHP进行表单验证

    php表单验证 In this article you'll construct and validate a simple form using HTML and PHP. The form is ...

  4. JMeter关联:JMeter正则表达式提取器与JSON提取器

    JMeter使用正则表达式和JSON提取器实现关联 前言 1 关联的释义与示例 2 常用正则表达式详解 3 正则表达式提取器 3.1 参数详解 3.2 使用示例 4 JSON提取器 4.1 参数详解 ...

  5. 图像分割与提取:交互式前景提取(附OpenCV代码实现)

    一.简介 经典的前景提取技术主要使用纹理(颜色)信息,如魔术棒工具,或根据边缘(对比度)信息,如智能剪刀等完成.2004 年,微软研究院(剑桥)的 Rother 等人在论文 GrabCut: Inte ...

  6. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶

    文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...

  7. jmeter的json提取器和json提取器取值

    前言: 本人觉得,json提取器比正则提取器的使用场景更多,大部分接口返回值其实是可以通过json提取器取值.正则表达式比我来说易用性不强,推荐直接学json提取器干活 思路: 1.试试怎么提取要取的 ...

  8. 中文文本摘要提取 (文本摘要提取 有代码)基于python

    任务简介 文本摘要旨在将文本或文本集合转换为包含关键信息的简短摘要.文本摘要按照输入类型可分为单文档摘要和多文档摘要.单文档摘要从给定的一个文档中生成摘要,多文档摘要从给定的一组主题相关的文档中生成摘 ...

  9. java怎么防止表单重复提交_如何防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

最新文章

  1. 迈吉客受邀参加《创意中国》, 85%超高支持率晋级年度盛典
  2. php memcache扩展的一个细节
  3. python学好了能干什么-Python语言能做什么,学好能干什么
  4. (转)事务是什么,以及事务四个特性
  5. Java并发程序设计(十一)设计模式与并发之生产者-消费者模式
  6. 输出最小公倍数和最大公约数
  7. springMVC整合swagger(亲自试验完全可用)
  8. Python基础(注释/算数运算符/变量类型/拼接字符串)
  9. 关于代码调用SSP获取UserProfile出错的解决方案
  10. 这是很简单的js拖拽方法
  11. 图:出场顺序号码随机抽取及公开展示,并行随机抽取多个题目号码及公开展示-软件原型设计
  12. CoppeliaSim用户手册中文翻译版(一)
  13. scipy安装_4. Python--Scipy库(下/13-17)
  14. 【python】《多媒体技术与应用》实验报告「数字图像基础」
  15. 中秋节主题征文 | 那些不朽的描写月亮的诗词
  16. 基于ESP32测温湿度上传到OneNET并通过微信小程序控制,查看,下发指令
  17. win10下装win7双系统_win10下怎么装win8系统 win10下装win8系统方法【详细教程】
  18. linux上删除rime方案_安装linux中文输入法rime并配置
  19. 《数据结构》实验报告七:查找
  20. 用Java做的模拟“双色球”机选号码

热门文章

  1. 大脑应对危机的模式_危机的完整形式是什么?
  2. python判断素数程序_使用面向对象方法检查素数的Python程序
  3. android inflate,Android 关于inflate
  4. can收发器 rx_CANOpen系列教程03 _CAN收发器功能、原理及作用
  5. python web服务器 apache_Windows下搭建Apache+Django+Python Web服务环境
  6. python变量 数据类型 列表 元组 字典
  7. kotlin 查找id_Kotlin程序查找Sphere的体积
  8. c ++查找字符串_C ++朋友功能| 查找输出程序| 套装2
  9. Redis 持久化——RDB
  10. 集合使用与内部实现原理