我需要在字符串中找到一个随机字符串。
我的字符串如下所示
{theme} pink {/ theme}或{theme} red {/ theme}
我需要在标签之间获取文本,每次刷新后文本可能会有所不同。
我的代码如下
$str = '{theme}pink{/theme}';
preg_match('/{theme}*{\/theme}/',$str,$matches);
但是没有运气。
答案 0 :(得分:3)
*只是量词,您需要指定量词的用途。您已将其应用于},这意味着可以有0个或更多'}'个字符。你可能想要“任何角色”,用点表示 也许你想只捕获带有(。*)
的{..}标签之间的部分$str = '{theme}pink{/theme}'; preg_match('/{theme}(.*){\/theme}/',$str,$matches); var_dump($matches);
答案 1 :(得分:2)
'/{theme}(.*?){\/theme}/'
或更严格的'/{theme}(\w*){\/theme}/'
应该完成这项工作
答案 2 :(得分:2)
preg_match_all('/{theme}(.*?){\/theme}/', $str, $matches);
你应该在这里使用ungreedy匹配。 $matches[1]
将包含所有匹配标记的内容作为数组。
答案 3 :(得分:0)
preg_match('/{theme}([^{]*){\/theme}/',$str,$matches);
[^{]
匹配除了左大括号之外的任何字符,以使正则表达式非贪婪,这很重要,如果每个字符串/行有多个标记
答案 4 :(得分:0)
$matches = array();
$str = '{theme}pink{/theme}';
preg_match('/{([^}]+)}([^{]+){\/([^}]+)}/', $str, $matches);
var_dump($matches);
这将丢弃您可能正在寻找的所有“标签”的所有匹配项。试一试,看看$matches
,你会明白我的意思。我假设您正在尝试构建自己的基本模板语言,因此这段代码可能对您有用。如果您是,我可能会建议您查看类似Smarty的内容。
在任何情况下,您都需要括号来捕获正则表达式中的值。上面有三个捕获的值:
([^}]+)
将捕获开头“标记”的值,即theme
。 [^}]+
表示“}
个字符中的任何字符中的一个或多个,默认情况下会使其非贪婪。
([^{]+)
将捕获标记之间的值。在这种情况下,我们希望匹配{
字符的所有字符。
([^}]+)
将捕获结束标记的值。