1

我在使用正则表达式时遇到问题。从来没有完全理解它真正的问题是:有没有人有一个很好的网站来解释表达之间的区别,而不是仅仅发布类似的东西

$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>

进入

<span style="color: #0000ff">*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);

这个特定问题的答案对我来说并不像网站那么重要,所以检查一下。尝试了很多不同的网站,我很确定它不会超出我的理解范围,我只是找不到适合所有糟糕教程/示例农场的好东西。w3 和 phpdotnet 的正常后备没有我这次需要的东西。

EDIT1对于那些最终在这里寻找类似答案的人:

$data = preg_replace("/<span style=\"color: #000000\">([0-9]{1,})<\/span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);

做了它需要做的事。可悲的是,这是我尝试的第一件事,但是因为我没有放 </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 解析也适用于这个特定问题。

4

3 回答 3

6

要解释正则表达式,您可以查看Regex101。要真正学习正则表达式(我推荐),这是一个非常好的、深入的教程。读完之后,PHP.net 上的 PCRE 文档似乎不再晦涩难懂,阅读它将帮助您了解 PHP 的一些特定差异。

但是,对于手头的问题,您实际上根本不应该使用正则表达式。DOM 解析器是要走的路。是一个非常方便使用的 3rd 方,就是 PHP 自带的。正如 hakre 所提到的,这里有一个更广泛的可用于此目的的库列表

PHP 中正则表达式的另一个一般建议:使用单引号'/pattern/',因为双引号会给转义序列带来很多麻烦(否则你需要加倍一些反斜杠)。

最后,您收到错误的原因是您的正则表达式分隔符(您使用/)显示在您的模式中(在结束span标记中)而没有被转义。这意味着引擎认为模式在第一个结束/并且span>/是 6 个不同的修饰符(其中大部分实际上并不存在)。您可以<\/span>'~yourPattern/Here~'.

编辑:自从我发布这个答案以来,已经发布了两个新网站,它们试图通过可视化来解释正则表达式。现在他们只支持(相当有限的)JavaScript 风格,但这是一个很好的起点:

于 2012-12-21T23:56:06.763 回答
1

http://www.macronimous.com/resources/writing_regular_expression_with_php.asp

看看这个。它似乎涵盖了相当不错的过程。

于 2012-12-21T23:55:59.023 回答
1

试试这个网站,也许。就个人而言,我想说如果你真的对正则表达式感兴趣,那么值得买一本这样的

于 2012-12-21T23:57:43.697 回答