2012-02-05 59 views
0

X我试图使用普通expresions选择字符串中的文本,但它我拉着我听得出来。这很疯狂。简单的正则表达式“选择”在字符串

我只是想whithin(”“), '全部' 文本

$text = 'jow this should match ("text") and not (this) also not "this"'; 
preg_match($pattern, $text, $match); 
echo $match[1]; 

什么$模式应该怎么使用?

请帮我要去这里疯了...

THX,

+0

这将帮助,如果你表现出你使用'$ pattern'。 – Tomalak 2012-02-05 17:27:58

回答

1
$text = 'jow this is some ("text") and some other text'; 
$pattern = '/\("([^"]*)"\)/'; 
preg_match($pattern, $text, $match); 
echo $match[1]; 
+0

Thx作品,但如果我把它作为$文本 - “哇,这是一些(”文本“)​​和一些(”其他“)文本。 我正在歌厅只有1场,$比赛[2]是空的? – kevinius 2012-02-05 17:29:24

+0

应使用[preg_match_all()](http://php.net/preg_match_all),然后$匹配[1]将所有匹配的值的数组。 – nachito 2012-02-05 17:40:07

-1

试试这个:

\"[a-z]*[A-Z]*[0-9]*\" 
+0

你的意思是'\ “[A-ZA-Z0-9] * \”',但即使如此,这将是缺少封闭'(...)'文字。 – Regexident 2012-02-05 17:49:48

+0

啊对了,忘了(和):/ – 2012-02-06 07:08:29

1

要通过这样的东西的工作,我倾向于去一个在线正则表达式工具,或者我会用我正在使用的语言编写一个小型的学术程序来隔离正规的exprssion。对于这一个,我用了http://regexpal.com/

如果你只是想匹配由括号和双引号值,这应该为你工作

\(".*?"\) 

你需要“越狱”(有前置\)的正则表达式的括号,因为parens是正则表达式中的元字符。 。*之后的问号使得星号(0或更多)量词不是贪婪的。如果没有它,就像

this ("stuff") would not be ("captured") together 

短语将匹配,而不是

("stuff") would not be ("captured") 

("stuff") 

("captured") 

分开。

有一件事我没有从你的问题得到的是你是否要匹配或捕获之间的文本(“”)。如果你想捕捉,需要添加另一组括号中(此时转义)是这样的:

\("(.*?)"\) 

我不知道PHP是怎么做的,但其他语言把它放进一个匹配组对象或成一个神奇的变量,例如$ 1,$ 2等,用于每个捕获的物品。你必须玩弄这些才能让事情变得顺利,但这个正则表达式应该能够帮助你理解你的问题。