正则表达式找到某些代码之间的文本

时间:2014-08-16 10:32:59

标签: php regex

我的文字是这样的;

[name]JAAN JOHN[/name]
[cell]09178656469[/cell]
[city]Dhaka[/city]

我希望使用正则表达式在上述每个[ ]引号之间获取文本。请原谅我,因为我搜索了很多这个网站,但无法得到我要求的答案。请帮忙!

编辑:

例如,我希望得到如下结果:

Name: JAAN JOHN
Cell #: 09178656469
City: Dhaka

如何获得此结果?

3 个答案:

答案 0 :(得分:2)

使用反向引用并从索引2获取匹配的组。在下面的示例代码中,我对cell标记感兴趣

\[(cell)\](.*?)\[\/\1\]

这是demo


如果您对匹配结束标记的所有标记感兴趣,请尝试

\[(.*?)\](.*?)\[\/\1\]

这是demo

从索引1获取所需的标记名称,从索引2获取值。

示例代码:

$re = "/\\[(.*?)\\](.*?)\\[\\/\\1\\]/";
$str = "[name]JAAN JOHN[/name]\n[cell]09178656469[/cell]\n[city]Dhaka[/city]";

preg_match_all($re, $str, $matches);

答案 1 :(得分:1)

这个正则表达式适用于每一行。

\[[^\]]+\](.*?)\[\/[^\]]+\]

测试正则表达式here

答案 2 :(得分:1)

使用Lookahead and Lookbehind Assertions

((?<=]).*(?=\[\/))

请参阅this demo