• 关于

    php正则匹配

    的搜索结果

问题

php正则:分组问题

落地花开啦 2019-12-01 20:05:21 942 浏览量 回答数 1

问题

php解析HTML使用php DomDocument类或者phpQuery,还是自己正则表达式匹配效率高?

杨冬芳 2019-12-01 20:01:32 967 浏览量 回答数 1

问题

请教各位在php的正则中如何实现忽略转义匹配?

落地花开啦 2019-12-01 19:52:51 910 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

关于PHP匹配汉字的问题,好纠结,求指点啊?报错

爱吃鱼的程序员 2020-06-22 14:45:56 0 浏览量 回答数 1

问题

Kavlez · 2015年02月09日回答 php正则表达式匹配<p style="XXXX"><span style="XXXX" >html内容</span></p>

杨冬芳 2019-12-01 20:01:44 1097 浏览量 回答数 1

问题

请教一个正则的问题匹配空格或则<\/a>? 400 报错

优选2 2020-06-09 10:56:15 0 浏览量 回答数 1

问题

请教一个正则的问题匹配空格或则<\/a>? 400 报错

爱吃鱼的程序员 2020-05-30 16:49:27 0 浏览量 回答数 1

问题

php正则表达式数字和中文识别问题

小旋风柴进 2019-12-01 20:08:44 915 浏览量 回答数 1

问题

关于PHP正则匹配table

小旋风柴进 2019-12-01 20:17:12 1027 浏览量 回答数 1

回答

表达式的递归匹配 有时候,我们需要用正则表达式来分析一个计算式中的括号配对情况。比如,使用表达式 "( 1 )" 或者 "( .? )" 可以匹配一对小括号。但是如果括号 内还嵌有一层括号的话 ,如 "( ( ) )",则这种写法将不能够匹配正确,得到的结果是 "( ( )" 。类似情况的还有 HTML 中支持嵌套的标签如 " " 等。本节将要讨论的是,想办法把有嵌套的的成对括号或者成对标签匹配出来。 匹配未知层次的嵌套: 有的正则表达式引擎,专门针对这种嵌套提供了支持。并且在栈空间允许的情况下,能够支持任意未知层次的嵌套:比如 Perl,PHP,GRETA 等。在 PHP 和 GRETA 中,表达式中使用 "(?R)" 来表示嵌套部分。 匹配嵌套了未知层次的 "小括号对" 的表达式写法如下:"\( ([^()] | (?R))* \)"。 [Perl 和 PHP 的示例代码] 匹配有限层次的嵌套: 对于不支持嵌套的正则表达式引擎,只能通过一定的办法来匹配有限层次的嵌套。思路如下: 第一步,写一个不能支持嵌套的表达式:"\( [^()]* \)","<font>((?!</?font>).)*</font>"。 这两个表达式在匹配有嵌套的文本时,只匹配最内层。 第二步,写一个可匹配嵌套一层的表达式:"( (2 | ( 2 )) )"。这个表达式在匹配嵌套层数大于一时,只能匹配最里面的两层,同时,这个表达式也能匹配没有嵌套的文本或者嵌套的最里层。 匹配嵌套一层的 "" 标签,表达式为:"((?!?font>).|(((?!?font>).)))"。这个表达式在匹配 "" 嵌套层数大于一的文本时,只匹配最里面的两层。 第三步,找到匹配嵌套(n)层的表达式 与 嵌套(n-1)层的表达式之间的关系。比如,能够匹配嵌套(n)层的表达式为: [标记头] ( [匹配 [标记头] 和 [标记尾] 之外的表达式] | [匹配 n-1 层的表达式] )* [标记尾] 回头来看前面编写的“可匹配嵌套一层”的表达式:  ` ( ( 2 | ((2)) ) ) ( (?!?font>). | (((?!?font>).)) ) `             PHP 和 GRETA 的简便之处在于,匹配嵌套(n-1)层的表达式用 (?R) 表示:\( ( [^()] | (?R) )* \) 第四步,依此类推,可以编写出匹配有限(n)层的表达式。这种方式写出来的表达式,虽然看上去很长,但是这种表达式经过编译后,匹配效率仍然是很高的。 非贪婪匹配的效率 可能有不少的人和我一样,有过这样的经历:当我们要匹配类似 "<td>内容</td>" 或者 "[b]加粗[/b]" 这样的文本时,我们根据正向预搜索功能写出这样的表达式:"<td>([^<]|<(?!/td>))*</td>" 或者 "<td>((?!</td>).)*</td>"。 当发现非贪婪匹配之时,恍然大悟,同样功能的表达式可以写得如此简单:"<td>.*?</td>"。 顿时间如获至宝,凡是按边界匹配的地方,尽量使用简捷的非贪婪匹配 ".*?"。特别是对于复杂的表达式来说,采用非贪婪匹配 ".*?" 写出来的表达式的确是简练了许多。 然而,当一个表达式中,有多个非贪婪匹配时,或者多个未知匹配次数的表达式时,这个表达式将可能存在效率上的陷阱。有时候,匹配速度慢得莫名奇妙,甚至开始怀疑正则表达式是否实用。 效率陷阱的产生: 在本站基础文章里,对非贪婪匹配的描述中说到:“如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。” 具体的匹配过程是这样的: "非贪婪部分" 先匹配最少次数,然后尝试匹配 "右侧的表达式"。如果右侧的表达式匹配成功,则整个表达式匹配结束。如果右侧表达式匹配失败,则 "非贪婪部分" 将增加匹配一次,然后再尝试匹配 "右侧的表达式"。如果右侧的表达式又匹配失败,则 "非贪婪部分" 将再增加匹配一次。再尝试匹配 "右侧的表达式"。依此类推,最后得到的结果是 "非贪婪部分" 以尽可能少的匹配次数,使整个表达式匹配成功。或者最终仍然匹配失败。 当一个表达式中有多个非贪婪匹配,以表达式` "d(\w+?)d(\w+?)z" `为例,对于第一个括号中的 "\w+?" 来说,右边的 "d(\w+?)z" 属于它的 "右侧的表达式",对于第二个括号中的 "\w+?" 来说,右边的 "z" 属于它的 "右侧的表达式"。 当 "z" 匹配失败时,第二个 "\w+?" 会 "增加匹配一次",再尝试匹配 "z"。如果第二个 "\w+?" 无论怎样 "增加匹配次数",直至整篇文本结束,"z" 都不能匹配,那么表示 "d(\w+?)z" 匹配失败,也就是说第一个 "\w+?" 的 "右侧" 匹配失败。此时,第一个 "\w+?" 会增加匹配一次,然后再进行 `"d(\w+?)z"` 的匹配。循环前面所讲的过程,直至第一个 "\w+?" 无论怎么 "增加匹配次数",后边的 `"d(\w+?)z" `都不能匹配时,整个表达式才宣告匹配失败。 其实,为了使整个表达式匹配成功,贪婪匹配也会适当的“让出”已经匹配的字符。因此贪婪匹配也有类似的情况。当一个表达式中有较多的未知匹配次数的表达式时,为了让整个表达式匹配成功,各个贪婪或非贪婪的表达式都要进行尝试减少或增加匹配次数,由此容易形成一个大循环的尝试,造成了很长的匹配时间。本文之所以称之为“陷阱”,因为这种效率问题往往不易察觉。 举例:`"d(\w+?)d(\w+?)d(\w+?)z" `匹配 `"ddddddddddd..." `时,将花费较长一段时间才能判断出匹配失败 。 效率陷阱的避免: 避免效率陷阱的原则是:避免“多重循环”的“尝试匹配”。并不是说非贪婪匹配就是不好的,只是在运用非贪婪匹配的时候,需要注意避免过多“循环尝试”的问题。 情况一:对于只有一个非贪婪或者贪婪匹配的表达式来说,不存在效率陷阱。也就是说,要匹配类似 "<td> 内容 </td>" 这样的文本,表达式 "<td>([^<]|<(?!/td>))*</td>" 和 "<td>((?!</td>).)*</td>" 和 "<td>.*?</td>" 的效率是完全相同的。 情况二:如果一个表达式中有多个未知匹配次数的表达式,应防止进行不必要的尝试匹配。 比如,对表达式 `"<script language='(.*?)'>(.*?)</script>"` 来说, 如果前面部分表达式在遇到 "<script language='vbscript'>" 时匹配成功后,而后边的` "(.*?)</script>" `却匹配失败,将导致第一个 ".*?" 增加匹配次数再尝试。而对于表达式真正目的,让第一个 ".*?" 增加匹配成“vbscript'>”是不对的,因此这种尝试是不必要的尝试。 因此,对依靠边界来识别的表达式,不要让未知匹配次数的部分跨过它的边界。前面的表达式中,第一个 ".*?" 应该改写成 "[^']*"。后边那个 ".*?" 的右边再没有未知匹配次数的表达式,因此这个非贪婪匹配没有效率陷阱。于是,这个匹配脚本块的表达式,应该写成:`"<script language='([^']*)'>(.*?)</script>"` 更好。 ) ↩ () ↩

小旋风柴进 2019-12-02 02:17:14 0 浏览量 回答数 0

问题

关于PHP正则匹配table的问题

小旋风柴进 2019-12-01 20:09:11 834 浏览量 回答数 1

问题

请教一个PHP正则匹配问题:报错

kun坤 2020-06-07 21:15:31 0 浏览量 回答数 1

问题

php正则匹配总是报错?报错

爱吃鱼的程序员 2020-06-22 20:33:07 0 浏览量 回答数 1

问题

php 正则匹配二级域名

小旋风柴进 2019-12-01 20:12:17 1006 浏览量 回答数 0

问题

php 正则匹配二级域名

小旋风柴进 2019-12-01 19:37:47 1180 浏览量 回答数 1

问题

php正则表达式如何匹配在竖线之间的文字或者字符?

小旋风柴进 2019-12-01 20:08:37 1086 浏览量 回答数 1

问题

PHP正则匹配内容是否属于A标签?

小旋风柴进 2019-12-01 20:09:58 1000 浏览量 回答数 1

问题

php:匹配数字+字母的正则应该怎么写啊:报错

kun坤 2020-06-09 23:16:56 0 浏览量 回答数 1

问题

开拓者网站加速器缓存规则配置说明

淹死的魚 2019-12-01 22:05:39 7254 浏览量 回答数 0

问题

apache 伪静态规则中如何匹配百分号% :报错

kun坤 2020-06-14 11:42:24 0 浏览量 回答数 1

问题

正则表达式匹配问题

小旋风柴进 2019-12-01 20:12:46 1054 浏览量 回答数 1

问题

apache 伪静态规则中如何匹配百分号% - apache报错

montos 2020-06-03 14:51:28 3 浏览量 回答数 1

问题

PHP一段正则表达式匹配结果不一致的问题

落地花开啦 2019-12-01 20:05:08 1007 浏览量 回答数 1

问题

PHP邮箱地址验证问题

吴孟桥 2019-12-01 19:47:19 999 浏览量 回答数 1

回答

WordPress完整的apache .htaccess是这样的<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>nginx, 则是location / { try_files $uri $uri/ /index.php?$args; }两者都是实现一个目地:将所有的uri请求转给index.php. index.php作为入口, 在某个时候调用wp-includes/class-wp.php,由parse_request函数负责解析当前的uri.我举个简单的例子,当你的permalink structure设置为/%postname%/%post_id%.html然后,wp内部生成相对应的正则, ([^/]+)/([0-9]+).html(/[0-9]+)?/?$访问http://www.test.com/i-am-a-post/123.html时,list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] ); $req_uri = trim($req_uri, '/');这时,$req_uri的值为i-am-a-post/123.html. 与permalink structure的正则匹配上了,获取后面的id,也就是123, 然后就是get_post了...这个例子是非常简化版的wp解析uri过程.大部分程序,包括框架,也是这样实现你所谓的"伪静态".一般,大家都称这个过程为routing. 由两个部分组成: parser 和dispatcher不推荐阅读wp代码, 尤其是新手.补充下:wp生成的正则 ([^/]+)/([0-9]+).html(/[0-9]+)?/?$.后面的(/[0-9]+)?/?$ 是用来匹配分页的.

西秦说云 2019-12-02 01:33:15 0 浏览量 回答数 0

回答

这种东西何必要用正则?直接搜索那两个字符串,取中间就行了回复<aclass='referer'target='_blank'>@leo108:我用的explode,先分出左侧的,再分出右侧的。总体结构是这样的<li><a因为最后2-3个对方做了防采集,目录页文字标题内容打乱了,但是内容页的文字标题内容是正确的。所以我现在还需要匹配最后2项内容,然后取出网址,再获取一次内容页中的标题。回复<aclass='referer'target='_blank'>@Kevin_Silence:字符串搜索字符串截取,这些函数都有的吧溢出了,PHP挂了。。PHP的正则有回溯次数限制 要么别用正则; 要么优化正则; 要么修改PHP配置,放宽限制,这个最简单我用ini_set('pcre.backtrack_limit',999999999);不起作用如果说你批量的获取网页信息可以使用simple_html_dom;  如果只是从网页哪一些简单的ID或者有明显标记的内容就用正则吧,自己感觉正则如果用的好对于这种需求实现起来很容易很好。标记下simple_html_dom。学习下这个。百度下小偷程序应该解决你的需求谢谢。

爱吃鱼的程序员 2020-06-22 20:33:22 0 浏览量 回答数 0

问题

下面问题中php正则表达式如何写?

落地花开啦 2019-12-01 20:00:12 780 浏览量 回答数 1

回答

--- 可以参照一下zend的实现。######求资料..######Zend Server的的web管理端有实现。######太复杂了, 我先试试用awk.exe来处理.######正则就可以啊######listen.* DocuemntRoot.*######求正则.######http://stackoverflow.com/questions/14429621/apache-config-parser-for-php######回复 @Tuesday : 是个pear包吧######好东西呀, 我怎么找不到下载地址?######用正则匹配###### D:\xampps\htdocs/httpd.conf Strict Standards: Non-static method PEAR::isError() should not be called statically in D:\xampps\htdocs\test.php on line 11 Listen: 80 经过努力, 安装上了pear, 可惜的是, pear也不是一件让人省心的事呀, 都有错误..

kun坤 2020-06-08 19:24:54 0 浏览量 回答数 0

回答

你可以试试PHP的执行命令的函数来执行下ping,看看有没有问题。 搞定。。好像原因是空格,,加了处理函数就没问题了,,,,地址是通过正则匹配得到的。那个函数。。。大神

爱吃鱼的程序员 2020-06-09 11:50:18 0 浏览量 回答数 0

问题

为什么在正则不加模式修正符的时候,PHP去匹配的中文字符会是乱码的?

落地花开啦 2019-12-01 20:05:27 1115 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 阿里云双十一主会场 阿里云双十一新人会场 1024程序员加油包 阿里云双十一拼团会场 场景化解决方案 阿里云双十一直播大厅