使用正则表达式从字符串中提取某些文本

时间:2011-09-21 16:09:22

标签: php regex preg-replace

我尝试从字符串中提取编码字符串,例如

$string = 'Louise Bourgeois and Tracey Emin: Do Not Abandon Me [date]Until 31 August 2011[ /date ]';

$description = preg_replace('/\[(?: |\s)*([date]+)(?: |\s)*\](.*?)\[(?: |\s)*([\/date]+)(?: |\s)*\]/is', '',$string);

$date = preg_replace('/\[(?: |\s)*([date]+)(?: |\s)*\](.*?)\[(?: |\s)*([\/date]+)(?: |\s)*\]/is', '$3',$string);

echo $date;

结果:

Louise Bourgeois and Tracey Emin: Do Not Abandon Me /date

预期结果:

Until 31 August 2011

我得到$description权利,但我无法让[date]权利。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

我认为一种相当简单的形式可以做到:

#.*?\[\s*?date\s*?\](.*)\[\s*?/date\s*?\].*#
例如

答案 1 :(得分:0)

([date]+)

这将寻找包含dat和/或e的一个或多个字母序列。 []是字符类的正则表达式元字符,不会被视为文字字符以进行匹配。你可能想要:

(\[date\])   and    (\[\/date\])

正确匹配那些打开/关闭“标签”。