PHP正则表达式的匹配

今天主要的任务就是对新闻、研究报告等咨询的最近上传时间和本地的时间进行对比,比较一下是否超过1个小时,然后我对此进行了php的编程

刚开始,我本来以为主页中就有所需要处理的文字的信息,但是我找了好久就是没有发现所要查找的文字的信息,刚开始的时候我并没有发现然后一直在那傻傻地用正则表达式处理html的源代码,后来我发现原来是我自己的问题,原来html源代码中并不包含新闻的代码。然后我就用chrome对页面进行查找,终于找到了新闻页面来源的url。然后对url进行处理。

在对url进行处理的时候,我就直接用正则表达式处理,可是在处理的时候出现了各种各样的问题。首先时间字符串的长度随着时间的变化可能会变得不一样,所以一开始我并不知道怎么去处理,然后尝试了好久,后来,我尝试用.*的方式对文字进行匹配,可是因为在php中默认采用的是贪婪匹配,所以一匹配就是匹配所有的东西,然后我就对此进行搜索,查找解决的方法,找了很久都不能找到。

后来,我问了一下我的一个同学,他和我说了正则表达式默认是采用贪婪匹配的方式,而可以改变模式为非贪婪匹配就可以解决这个问题。

打个比方说,有一段html:<div>asdef<em>ccda</em>aae<br>sdc</div><div>asdef<em>dfge</em><br>sdc</div>。

我想通过preg_match_all利用规则
<div>\s*<br>
将<div>asdef<em>ccda</em>aae<br>匹配出来,但是PHP好像并没有非贪婪模式的选项,导致匹配出来的是内容是
<div>asdef<em>ccda</em>aae<br>sdc</div><div>asdef<em>dfge</em>,因为贪婪模式匹配到了后面的<br>了
/正则/U 参数U,用书上的原话是,不再贪婪

然后我终于解决了问题

<?php
/*判断最近更新时间是否大于一个小时函数*/
function limittimeindex($url){
	$info=file_get_contents($url);/*获取url的页面*/
	preg_match('/date.*\",/U',substr($info,0),$m,PREG_OFFSET_CAPTURE);/*正则匹配字符串*/
	$time=substr($m[0][0],7,-2);/*获取最新的网页更新时间*/
	$systime=date("Y-m-d H:i:s");/*获取系统时间*/
	if(strtotime($systime)-strtotime($time)>=3600){/*比较系统时间是否大于最近更新时间1小时,如果是则错误,如果不是则正确*/
		echo "this is false<br>";
	}
	else{
		echo "this is true<br>";
	}
	echo $time,"<br>";
	echo $systime;
}
echo "<form method='POST' action=''>
<input type='text' name='url' value=''>
<input type='submit' value='submit'>
</form>";
if(isset($_POST['url']) && $_POST['url']!=''){
	$url2=$_POST['url'];
	limittimeindex($url2);
}
?>

http://zhidao.baidu.com/question/110658951.html?qq-pf-to=pcqq.c2c

时间: 2024-10-17 09:25:09

PHP正则表达式的匹配的相关文章

17._4Csharp中正则表达式的匹配

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; namespace _17._4Csharp中正则表达式的匹配 { class Program { static void Main(string[] args) { string patte

JS 正则表达式否定匹配(正向前瞻)

引言:JS 正则表达式是 JS 学习过程中的一大难点,繁杂的匹配模式足以让人头大,不过其复杂性和其学习难度也赋予了它强大的功能.文章从 JS 正则表达式的正向前瞻说起,实现否定匹配的案例.本文适合有一定 JS 正则表达式基础的同学,如果对正则表达式并不了解,还需先学习基础再来观摩这门否定大法. 一.标签过滤需求 不知道大家在写JS有没有遇到过这样的情况,当你要处理一串字符串时,需要写一个正则表达式来匹配当中不是 XXX 的文本内容.听起来好像略有些奇怪,匹配不是 XXX 的内容,不是 XXX 我

JavaScript中正则表达式判断匹配规则以及常用的方法

JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配"了. \d可以匹配一个数字                 '00\d'可以匹配'007' ,'\d\d\d'可以匹配'010' \w可以匹配一个字母或数字      '\w\w'可以匹配'js' \s可

正则表达式实例 -- 匹配Windows消息宏

Windows消息宏,定义在winuser.h里,消息编号从 0x0000 到 0x0400,下面给出一部分: 1 #define WM_NULL 0x0000 2 #define WM_CREATE 0x0001 3 #define WM_DESTROY 0x0002 4 #define WM_MOVE 0x0003 5 #define WM_SIZE 0x0005 正则表达式: 1 #define (.+?) (0x[0-9a-fA-F]{1,4}) 在线测试工具: http://tool.

idea 使用正则表达式 进行匹配替换

关于正则表达式 可以参考相应的笔记 另外 如果要提取正则表达式中匹配到的内容,使用$1 - $... 按顺序取(第一个表达式 到 第N个表达式匹配到的数据),  这点和linux正则获取的方式是一样的

使用正则表达式进行匹配

使用正则表达式的目的是为了实现比字符串处理函数更加灵活的处理方式,因此跟字符串处理函数一样,其主要用来判断子字符串是否存在.字符串替换.分割字符串.获取模式子串等. PHP使用PCRE库函数来进行正则处理,通过设定好模式,然后调用相关的处理函数来取得匹配结果. preg_match用来执行一个匹配,可以简单的用来判断模式是否匹配成功,或者取得一个匹配结果,他的返回值是匹配成功的次数0或者1,在匹配到1次以后就会停止搜索. $subject = "abcdef"; $pattern =

Nginx正则表达式之匹配操作符详解

nginx可以在配置文件中对某些内置变量进行判断,从而实现某些功能.例如:防止rewrite.盗链.对静态资源设置缓存以及浏览器限制等等.由于nginx配置中有if指令,但是没有对应else指令,所以判断要分为匹配和不匹配. 字符串表达式支持正则表达式,能设定大小写是否敏感.因此共有四个操作符, 如下: ~     区分大小写(大小写敏感)匹配成功 ~*   不区分大小写匹配成功 !~    区分大小写匹配失败 !~*  不区分大小写匹配失败 1: 限制某些类型的客户端的访问if指令所有的Ngi

正则表达式——从匹配北美电话号码和邮箱地址学习

一般北美电话号码的格式为: 999-999-9999 或者999x999x9999 (x表示任意字符) 用字符组来匹配: [0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] 用字符组简写式: \d\d\d-\d\d\d-\d\d\d\d 括选文字符: ^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$ 第一个^表示电话号码会出现在一行的起始位置 左括号{为捕获分组的起始符 \(表示左括号本身(转义字符) \d匹

含有换行符的正则表达式如何匹配

含有换行符的正则表达式如何匹配: \s\S \S是各种空白字符,比如\n\t之类的,而\s是^\S 点号( . )可以匹配换行符之外的任何单个字符,被称之为通配符. 匹配包含\n在內的任何字符用 (.|\n). import re strvar = """hello world!""" patt = r'(.|\n)*' rs = re.match(patt, strvar) print rs.group() 用正则表达式来获取一段文本中的任意字

正则表达式中\{\} --匹配模式出现的次数

正则表达式: \{\}    匹配字符出现的次数 使用*可匹配所有匹配结果人一次,但如果只要制定次数,就应该使用\{\},此模式有三种形式. pattern\{n\}         匹配模式出现n次 pattern\{n,\}        匹配模式出现最少n次 pattern\{n,m\}         匹配模式出现n到m次,n,m分别为0-255之间的任意整数 例: A\{2\}B      匹配值为AAB A\{4\}B        匹配值为AAAAB或者AAAAAAB,但是不能为A