我试图使用正则表达式选择字符串中的文本,但我的听力很差。这太疯狂了。
我只想要中的"所有"文本
$text = 'jow this should match ("text") and not (this) also not "this"';
preg_match($pattern, $text, $match);
echo $match[1];
我应该使用什么$模式?
请帮帮我,我快疯了。。。
Thx,
$text = 'jow this is some ("text") and some other text';
$pattern = '/'("([^"]*)"')/';
preg_match($pattern, $text, $match);
echo $match[1];
要处理这样的事情,我倾向于使用在线正则表达式工具,或者我会用我正在使用的语言编写一个小型的学术程序来隔离正则表达式。对于这个,我使用http://regexpal.com/.
如果你只想匹配被括号和双引号包围的值,这应该适用于
'(".*?"')
您需要对正则表达式中的parens进行"转义"(以''开头),因为parens是regex中的元字符。.*后面的问号使得星号(0或更多)量词不贪婪。没有它,像这样的短语
this ("stuff") would not be ("captured") together
将匹配
("stuff") would not be ("captured")
而不是
("stuff")
和
("captured")
单独。
我没有从你的问题中得到一件事,那就是你是否试图匹配或捕获("..")之间的文本。如果你想捕获,你需要添加另一组parens(这次是unscaped),如下所示:
'("(.*?)"')
我不确定php是如何做到这一点的,但其他语言将其放入匹配的组对象中,或放入神奇的变量中,如$1、$2等,用于每个捕获的项目。你必须考虑一下才能把事情弄清楚,但这个正则表达式应该能从我对你问题的解读中得到你所需要的。
试试这个:
'"[a-z]*[A-Z]*[0-9]*'"