2011-06-29 50 views
3

简单地说,我需要从文本中提取的一大块花括号中的所有字符串,如PHP正则表达式,从文本中提取所有的自定义标签

这里是一个{标签},但这里{TAG_2}如好吧,然后再一次... {tag_3} ...在这里,但周围有一些垃圾。我想要一个标签,tag_2和tag_3数组。 标签只能包含单词字符。

我尝试这样做:

$tags = array(); 
preg_match_all("/\{\w+\}/s", $data['text'], $tags); 

的标签阵列,如果在文字上面的片段运行,返回空。

编辑:

我的滋扰大家道歉,原来我搞砸了以后。我通过$ tags而不是$ tags [0]捕获标签,因此我的合并数组总是空的。

+0

什么不适合你的正则表达式?标签名称中缺少'_'? – hakre

+0

标签数组返回为空。 – Swader

+0

您是否尝试过不脱离大括号?我不认为他们需要逃脱。 – Spudley

回答

3

它工作正常:

<?php 
$text = 'Here is a {tag}, but here {tag_2} as well, and then again ...{tag_3}... here but with some trash around it.'; 
$tags = array(); 
preg_match_all("/\{\w+\}/s", $text, $tags); 
print_r($tags); 
?> 

生产:

Array 
(
    [0] => Array 
     (
      [0] => {tag} 
      [1] => {tag_2} 
      [2] => {tag_3} 
     ) 

) 

$data['text']可能是空的。使用Ideone进行测试。

+0

确实。文本并不是空的,但后来我搞砸了。运行array_unique(array_merge(/ *许多标签数组在这里* /))返回并为空数组。谢谢!编辑主要问题来解释我做错了什么。它有一天可能会帮助别人。 – Swader

+0

@Swader,没问题。 –

0

也许,如果你错过了(可选)强调在您正则表达式:

$tags = array(); 
preg_match_all("/\{[a-z]+(?:_[1-9][0-9]*)?\}/s", $data['text'], $tags); 

这是不符合你的正则表达式为\w的情况下包含下划线。留下以下评论的问题。

+1

我认为下划线是单词字符,因此包含在w +中? – Swader

+0

@Swader,更正('\ w',不是'w +')。 –

+0

我明白了。谢谢,但巴特最终是正确的,正则表达式的作品,后来我把它搞砸了,同时结合了来自不同文本的多个标签数组。 – Swader

相关问题