【发布时间】:2011-03-16 22:40:31
【问题描述】:
我的正则表达式真的很糟糕 - 从来没有足够的时间来正确地学习它。
我正在尝试查找字符串中用 %% %% 包裹的所有元素 - 例如:
%%图库%%
知道什么正则表达式可以在这里完成这项工作吗?
稍后我将在 PHP 中使用它来将占位符替换为相关插件。
【问题讨论】:
-
例如,
/%%(.+?)%%/s会匹配。如果您需要更合适/更准确的答案,则必须提供有关该问题的更多信息。
我的正则表达式真的很糟糕 - 从来没有足够的时间来正确地学习它。
我正在尝试查找字符串中用 %% %% 包裹的所有元素 - 例如:
%%图库%%
知道什么正则表达式可以在这里完成这项工作吗?
稍后我将在 PHP 中使用它来将占位符替换为相关插件。
【问题讨论】:
/%%(.+?)%%/s 会匹配。如果您需要更合适/更准确的答案,则必须提供有关该问题的更多信息。
preg_replace("/%%\w+%%/", "replacement", "string");
【讨论】:
/%%[a-z]+%%/i 之类的东西会起作用。
[a-z]+ 部分表示在 a-z 之间应该有多个字符 (+),并用 % 包围。 /i 使其不区分大小写。
【讨论】:
一个正则表达式是:
%%(.*?)%%
如:
$string = preg_replace('/%%(.*?)%%/', '{replacement for $1}', $string);
.* 匹配“任何东西”,? 使其成为非贪婪匹配,这意味着它会尝试找到尽可能短的匹配。如果您有一个类似"%%a%% %%b%%" 的字符串,您不希望它找到可能的最长 匹配项,即a%% %%b。
%%a%% %%b%% # Greedy
^^^^^^^
%%a%% %%b%% # Non-greedy
^ ^
替换字符串中的$1 是匹配的标签。在你的例子中,这就是gallery这个词。
【讨论】:
(?<!%)%%([^%]+)%%(?!%)
这完全匹配 %%anything%%。匹配内容也正确,例如“Lorem ipsum %%sample%% lorem %%%ipsum%%% 等等”。
【讨论】: