2011-01-22 38 views
0

在为客户开发私人CMS时,我有一个想法来实现一个基于php的服务器端和灵活的“语言”。Reg-Ex用于过滤,解析和替换特定的字符串? (php)

我无法找到一个请求 - 表达式查找(过滤器..)下面的字符串([..]是代码,它将被过滤掉后被解析),我想过滤字符串出与换行

<(
    [..] 
)> 

我一直在寻找解决方案,但我没有找到解决方案。

+7

如果你不能编写自己的正则表达式,你确定你应该编写自己的语言,如果你想使它们比简单的字符串占位符更多,不能用正则表达式解析吗?也许你应该在你的CMS中使用别人的模板系统。降价,Smarty,什么。人们几十年来一直在编写模板语言,您不必重新发明轮子。 – 2011-01-22 10:40:48

+0

这不像我不能写正则表达式。这就像我不能用这种格式解析字符串并在* php *格式中换行符。 – 2011-01-22 11:22:39

回答

1

首先:听听Dan Grossman的建议。

从我目前对您的问题的理解中,您想要得到<()>之间的逐字内容 - 没有例外,没有评论处理。

如果是的话,试试这个正则表达式

'/<\(((?:.|\s)*?)\)>/' 

,你可以使用这样

preg_match_all('/<\(((?:.|\s)*?)\)>/', $yourstring, $matches) 

它并不需要区分大小写,而且它确实懒惰匹配(这样你就可以将它应用于一个包含多个匹配实例的字符串)。


说明的正则表达式的:与<(开始,以结束)>(括号逃脱当然),在两者之间是捕获组。在其核心,我们采用普通字符.或空格\s(它解决了您的问题,因为换行符也是空格)。我们不想捕捉每一个字符,所以内部组不捕获 - 只是空白或字符:(?:.|\s)。这会重复任意次数(包括零),但仅限于第一次匹配完成时:*?用于延迟0-n。就是这样,希望它有帮助。