添加笔记

用户贡献笔记 8 笔记

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

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

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

正如本手册页所说,您需要 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
18 年前
关于“与 Perl 的区别”中的注释 #6,\G 标记 *是* 支持的作为最后一个匹配位置锚点。已确认这至少在 preg_replace() 中有效,尽管我认为它也会在 preg_match_all() 和其他可以进行多次匹配的函数中有效。
To Top