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);