2011-03-16 430 views
1

我对正则表达式非常不满 - 从来没有足够的时间正确地学习它。正则表达式:查找包含特定选择器的元素

我试图找到它们包裹着%% %%字符串中的所有元素 - 例如将是:

%%画廊%%

任何想法,正则表达式会在这里完成这项工作吗?

我打算稍后在PHP中使用它来用相关插件替换占位符。

+0

'/ %%(.+?)%%/ s'会匹配那个。如果您需要更合适/更准确的答案,您必须提供有关该问题的更多信息。 – dialer 2011-03-16 14:31:23

回答

1

看:regex greedy problem (C#)

(?<!%)%%([^%]+)%%(?!%)

这正是%%什么%%匹配。这是非贪婪的匹配也正确的内容,如'Lorem ipsum %% sample %% lorem %%% ipsum %%%等等。例如,

+0

完美无缺 - 非常感谢大家! – user398341 2011-03-16 14:47:51

2

就像/%%[a-z]+%%/i会工作。

[a-z]+部分表明a-z之间应该有多个字符(+),并用%围成一圈。/i使其不区分大小写。

2

一个正则表达式是:

%%(.*?)%% 

如:

$string = preg_replace('/%%(.*?)%%/', '{replacement for $1}', $string); 

.*匹配“万能”,?使它成为一个非贪婪的比赛,这意味着它试图找到尽可能短的尽可能匹配。如果你有一个像"%%a%% %%b%%"这样的字符串,你不希望它找到最长的可能匹配,这将是a%% %%b

%%a%% %%b%%   # Greedy 
    ^^^^^^^ 

%%a%% %%b%%   # Non-greedy 
^ ^

替换字符串的$1是任何匹配的标签。在你的例子中,这将是字gallery

3
preg_replace("/%%\w+%%/", "replacement", "string"); 
相关问题