Non*_*ded 1 php regex preg-replace html-parsing
我正在使用正则表达式.从来没有完全理解它真正的问题是:是否有人有一个很好的网站,解释表达之间的差异,而不只是发布像
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
Run Code Online (Sandbox Code Playgroud)
然后讨论整个线路的作用.而不是每个表达式将做什么.我已经尝试使用Google搜索许多不同版本的preg_replace和regex教程,但他们似乎都认为我们已经知道像\ b [^>]*会做什么.
二级.我试图这样做的原因:我想转
<span style="color: #000000">*ANY NUMBER*</span>
Run Code Online (Sandbox Code Playgroud)
成
<span style="color: #0000ff">*ANY NUMBER*</span>
Run Code Online (Sandbox Code Playgroud)
一些变种,我已经尝试过一些只是没有工作一些使脚本废话.
$data = preg_replace("/<span style=\"color: #000000\">([0-9])</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);//just tried to match atleast 0-9
$data = preg_replace("/<span style=\"color: #000000\"\b[^>]*>(.*?)</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);
$data = preg_replace("/<span style=\"color: #000000\"\b[^>]*>([0-9])</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);
Run Code Online (Sandbox Code Playgroud)
这个具体问题的答案对我来说并不像一个网站那么重要,所以检查就是这样.尝试了很多不同的网站,我很确定它不高于我的理解我只是找不到一个好的所有坏教程/示例农场.W3和phpdotnet的正常回退不具备我这次需要的东西.
EDIT1对于那些最终在这里寻找类似答案的人:
$data = preg_replace("/<span style=\"color: #000000\">([0-9]{1,})<\/span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);
Run Code Online (Sandbox Code Playgroud)
做了它需要的东西.可悲的是,这是我尝试的第一件事之一,但因为我没有放</ span>而不是它不起作用,我不知道"[0-9] {1,}"是否是最合适的匹配方式number(告诉它匹配任何整数0-9与[0-9]至少一次,尽可能多次与{1,},它仍然适合目的)
ROY Finley发布时间:http: //www.macronimous.com/resources/writing_regular_expression_with_php.asp 它是一个很好的网站,有一个表达式定义列表和一个很好的示例后续工作.
另外:regular-expressions.info/tutorial.html发布了几次.它是一个更慢,更深入的步行,但如果你被卡住,我就是它的好.
在我有机会玩它们之后,会弹出regex101和解析器.
EDIT2 DWright在"掌握正则表达式"下面发布了一个书籍链接.如果你看一下正则表达式并且无法对字符的卷积做出正面或反面,那么它绝对值得一试.花了大约一个半小时来阅读大约一半,但这与谷歌花费的时间相比没有时间,并且用来避免它的乱七八糟的工作.
下面链接的html解析也适用于这个特定问题.
要解释正则表达式,您可以查看Regex101.要真正学习正则表达式(我推荐),这是一个非常好的,深入的教程.阅读完之后,PHP.net上的PCRE文档似乎不再晦涩难懂,阅读它将帮助您了解PHP的一些特定差异.
但是,对于手头的问题,你根本不应该使用正则表达式.DOM解析器是可行的方法.这是一个非常方便使用的第三方,这就是PHP带来的.正如hakre所提到的,这里有一个更广泛的库列表可用于此目的.
PHP中正则表达式的另一个一般建议:使用单引号'/pattern/',因为双引号会导致转义序列出现很多问题(否则需要加倍一些反斜杠).
最后,您遇到错误的原因是您的正则表达式分隔符(您使用/)会显示在您的模式中(在结束span标记中)而不会被转义.这意味着引擎认为模式在第一个结束,/并且span>/是6个不同的修饰符(其中大多数实际上不存在).您可以像<\/span>或更好地转义分隔符,更改分隔符(您可以使用几乎任何东西)'~yourPattern/Here~'.
编辑:自从我发布这个答案后,已经发布了两个新网站,试图通过可视化来解释正则表达式.现在他们只支持(非常有限的)JavaScript风格,但这是一个很好的开始:
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |