PHP Conference Japan 2024
添加注释

用户贡献的注释 8 条注释

Hayley Watson
6 年前
根据经验,最好使用单引号字符串来描述正则表达式模式。

使用双引号字符串,PHP 和 PCRE 对字符串哪些部分是转义序列的解释之间的交互可能会变得很混乱。正则表达式本身已经足够混乱了,不需要再增加一层转义来使其变得更糟。
sam marshall
17 年前
对于看到此错误的任何人

警告:preg_match() [function.preg-match]:编译失败:PCRE 不支持 \L、\l、\N、\P、\p、\U、\u 或 \X at ...

如本手册页所述,您需要 PHP 5.1.0 和 /u 修饰符才能启用这些功能,但这并不是唯一的要求!可以在链接到旧版 PCRE 安装的同时安装更高版本的 PHP(我们有 5.1.4)。快速查看 PCRE 变更日志表明您可能至少需要 PCRE 5;我们正在运行 4.5,而最新版本是 7.1。您可以通过检查 phpinfo() 来了解您的 PCRE 版本。

我怀疑此旧版 PCRE 版本包含在某些官方支持的 Red Hat Enterprise 软件包中,这可能是我们运行它的原因,也可能影响其他人。
J Daugherty
19 年前
在上面的字符类元字符文档中,描述了脱字符 (^)

"^ 取反类,但仅当它是第一个字符时"

它应该更详细一点以充分表达 ^ 的含义

^ 取反字符类。如果使用,它必须是类的第一个字符(例如 "[^012]")。
napalm at spiderfish dot net
20 年前
请注意,某些 pcre 功能(例如一次性或递归模式)在 5.00 之前的 php 版本中未实现

Napalm
pstradomski at gmail dot com
17 年前
关于下面两篇文章中的 strip_selected_tags 函数

如果有人使用没有结束 ">" 字符的标签,例如这样,它将不起作用

<p <b> 粗体文本 </b</p

这甚至也是有效的 HTML(但不是有效的 XHTML)
onerob at gmail dot com
19 年前
如果,像我一样,您倾向于使用 /U 模式修饰符,那么您需要记住,使用 ? 或 * 来测试可选字符,如果这意味着模式的其余部分可以继续匹配,即使可选字符存在,也将匹配零个字符。

例如,如果我们有这个字符串

a___bcde

并应用此模式

'/a(_*).*e/U'

整个模式都匹配,但没有一个 _ 字符被放入子模式中。解决此问题的方法(如果您仍然希望使用 /U)是使用 ? 贪婪反转器。例如,

'/a(_*?).*e/U'
info at atjeff dot co dot nz
19 年前
我以前从未使用过正则表达式,并且在尝试将 [url]此处链接[/url] 转换为 href 以用于在论坛上发布消息时遇到了很多困难,这是我设法想出的方法

$patterns = array(
"/\[link\](.*?)\[\/link\]/",
"/\[url\](.*?)\[\/url\]/",
"/\[img\](.*?)\[\/img\]/",
"/\[b\](.*?)\[\/b\]/",
"/\[u\](.*?)\[\/u\]/",
"/\[i\](.*?)\[\/i\]/"
);
$replacements = array(
"<a href=\"\\1\">\\1</a>",
"<a href=\"\\1\">\\1</a>",
"<img src=\"\\1\">",
"<b>\\1</b>",
"<u>\\1</u>",
"<i>\\1</i>"

);
$newText = preg_replace($patterns,$replacements, $text);

一开始它会将所有标签收集到一个链接/粗体/任何内容中,直到我添加了 "?" 我仍然不太理解它... 但它确实有效 :)
Daniel Vandersluis
19 年前
关于“与 Perl 的区别”中的第 6 条注释,\G 令牌*确实*受支持作为最后一个匹配位置锚点。已确认这至少在 preg_replace() 中有效,尽管我认为它也将在 preg_match_all() 和其他可以进行多次匹配的函数中有效。
To Top