在字符串中获取随机字符串

时间:2009-10-05 13:00:04

标签: php

我需要在字符串中找到一个随机字符串。

我的字符串如下所示

{theme} pink {/ theme}或{theme} red {/ theme}

我需要在标签之间获取文本,每次刷新后文本可能会有所不同。

我的代码如下

$str = '{theme}pink{/theme}'; 
preg_match('/{theme}*{\/theme}/',$str,$matches);

但是没有运气。

5 个答案:

答案 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[^}]+表示“}个字符中的任何字符中的一个或多个,默认情况下会使其非贪婪。

([^{]+)

将捕获标记之间的值。在这种情况下,我们希望匹配{字符的所有字符。

([^}]+)

将捕获结束标记的值。