简单的正则表达式'select'x in string

时间:2012-02-05 17:14:46

标签: php regex

我正在尝试使用常规表达式选择字符串中的文本,但我正在拉扯我的声音。这太疯狂了。

我只想要'所有'文字whithin(“”)

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

我应该使用什么样的模式?

请帮助我在这里发疯...

THX,

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

如果您只想匹配由parens和双引号括起来的值,这应该适合您

    \(".*?"\)

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

这样的短语
    this ("stuff") would not be ("captured") together 

会匹配

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

而不是

    ("stuff") 

    ("captured") 

分开。

我从你的问题中得不到的一件事是你是否试图匹配或捕捉(“..”)之间的文本。如果你想捕获,你需要添加另一组parens(这次没有转义),如下所示:

    \("(.*?)"\)

我不确定php是如何做到的,但是其他语言将它放在一个匹配的组对象中,或者放入一个神奇的变量,如$ 1,$ 2等,用于每个捕获的项目。你必须要努力解决这个问题,但这个正则表达式可以让你在阅读问题时得到你所需要的东西。

答案 2 :(得分:-1)

试试这个:

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