PHP中的preg/regex
我的正则表达式有问题。真正的问题是:有没有人有一个好的网站来解释这两种表达方式之间的区别,而不是仅仅发布这样的东西PHP中的preg/regex,php,regex,html-parsing,preg-replace,Php,Regex,Html Parsing,Preg Replace,我的正则表达式有问题。真正的问题是:有没有人有一个好的网站来解释这两种表达方式之间的区别,而不是仅仅发布这样的东西 $regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/"; 然后喋喋不休地说那句话作为一个整体会做什么。而不是每个表达式将要做什么。我试过用谷歌搜索preg_replace和regex教程的许多不同版本,但它们似乎都假设我们已经知道\b[^>]*之类的东西会
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
然后喋喋不休地说那句话作为一个整体会做什么。而不是每个表达式将要做什么。我试过用谷歌搜索preg_replace和regex教程的许多不同版本,但它们似乎都假设我们已经知道\b[^>]*之类的东西会做什么
次要的。我尝试这样做的原因是:
我想转身
<span style="color: #000000">*ANY NUMBER*</span>
*任意数字*
进入
*任意数字*
我已经尝试过的一些变体,有些根本不起作用,有些甚至使脚本变得糟糕
$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);
$data=preg_replace(“/([0-9])/”、“$1”、$data)//刚刚试着匹配至少0-9
$data=preg_replace(“/]*>(.*?/”、“$1”、$data);
$data=preg_replace(“/]*>([0-9])/”、“$1”、$data);
对我来说,这个特定问题的答案远不如一个站点重要,所以请检查一下。尝试了很多不同的网站,我很确定这并不超出我的理解力,我只是找不到一个适合所有糟糕教程/示例农场的好网站。w3和phpdotnet的正常回退没有我这次需要的
EDIT1对于那些来到这里寻找类似答案的人:
$data = preg_replace("/<span style=\"color: #000000\">([0-9]{1,})<\/span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);
$data=preg_replace(“/([0-9]{1,})/”、“$1”、$data);
做了它需要做的。遗憾的是,这是我尝试的第一件事情之一,但因为我没有把它放进去,而它不起作用,我不知道“[0-9]{1,}”是否是匹配任何数字的最合适的方法(告诉它将任何整数0-9与[0-9]至少匹配一次,并尽可能多次地匹配{1,}它仍然符合目的)
罗伊·芬利发布:
这是一个很好的网站,有一个表达式定义列表,下面是一个很好的示例
此外:
regular-expressions.info/tutorial.html发布了几次。这是一个更慢更深入的步行通过,但如果你像我一样卡住了它的好
在我有机会玩了regex101和解析器之后,我会突然发现它们
EDIT2
DWright在“掌握正则表达式”下面发布了一个图书链接。如果你看正则表达式,不能理解字符的卷积,那么绝对值得去学习。花了大约一个半小时阅读了大约一半的内容,但与花在谷歌上的时间和用来避免它的混乱工作相比,这根本算不上时间
下面链接的html解析也适用于此特定问题。
看看这个。它似乎很好地涵盖了这个过程。
看看这个。它似乎很好地涵盖了这个过程。要解释正则表达式,您可以看看。要真正学习正则表达式(我推荐)。在您阅读了这篇文章之后,这个问题就不应该再显得神秘了,阅读它将帮助您了解PHP的一些具体差异 然而,对于眼前的问题。DOM解析器是一个不错的选择。这是一个非常方便使用的第三方,也是PHP带来的。正如hakre所提到的 PHP中正则表达式的另一个一般建议是:使用单引号
'/pattern/'
,因为双引号会给转义序列带来很多麻烦(否则需要将一些反斜杠加倍)
最后,出现错误的原因是您的正则表达式分隔符(您使用的是/
)显示在您的模式中(在结束span
标记中),而没有转义。这意味着引擎认为模式在第一个/
处结束,并且span>/
是6个不同的修饰符(大多数修饰符实际上并不存在)。您可以像
那样避开分隔符,或者更好的是,更改分隔符(您几乎可以使用任何东西),比如'~yourPattern/Here~'
编辑:自从我发布这个答案以来,已经发布了两个新的网站,它们试图通过可视化来解释正则表达式。目前,它们只支持(相当有限的)JavaScript风格,但这是一个很好的起点:
- 要解释正则表达式,您可以查看。要真正学习正则表达式(我推荐)。在您阅读了这篇文章之后,这个问题就不应该再显得神秘了,阅读它将帮助您了解PHP的一些具体差异
然而,对于眼前的问题。DOM解析器是一个不错的选择。这是一个非常方便使用的第三方,也是PHP带来的。正如hakre所提到的
PHP中正则表达式的另一个一般建议是:使用单引号
'/pattern/'
,因为双引号会给转义序列带来很多麻烦(否则需要将一些反斜杠加倍)
最后,出现错误的原因是您的正则表达式分隔符(您使用的是/
)显示在您的模式中(在结束span
标记中),而没有转义。这意味着引擎认为模式在第一个/
处结束,并且span>/
是6个不同的修饰符(大多数修饰符实际上并不存在)。您可以像
那样避开分隔符,或者更好的是,更改分隔符(您几乎可以使用任何东西),比如'~yourPattern/Here~'
编辑:自从我发布这个答案以来,已经发布了两个新的网站,它们试图通过可视化来解释正则表达式。目前,它们只支持(相当有限的)JavaScript风格,但这是一个很好的起点:
- 也许可以试试这个。就我个人而言,如果你真的对正则表达式感兴趣,那么买一本像这样的书是值得的。也许试试这个。就个人而言,我想说,如果你真的对正则表达式感兴趣,那就值得买一本像这样的书。你有没有尝试过去那里,尝试一下你的正则表达式live…@veritas it
$data = preg_replace("/<span style=\"color: #000000\">([0-9]{1,})<\/span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);