所以我有这个正则表达式:
$text = '"sadfsafsafsafsaf"';
$text2 = '"sadfsafsafsafsaf';
$matches = array();
preg_match('/"(.+)"?/', $text, $matches);在本例中,我打算只捕获不带引号的sadfsafsafsafsaf,因此,在preg_match()中使用$text和$text2的两种情况下,我都希望$matches[1]中匹配的输出仅为sadfsafsafsafsaf
然而,当我使用$text时,匹配值将改为sadfsafsafsafsaf (即.最后还会有一个引号)
有没有办法改变我的正则表达式,使它在两种情况下都是sadfsafsafsafsaf?
注意:在有人问为什么不直接使用trim()之前……这是因为我只想去掉第一个外引号。
发布于 2013-01-30 10:20:41
[^"]+将捕获任意数量的相邻非引号。
发布于 2013-01-30 10:20:55
尝试将.+更改为.*,并在模式的末尾添加一个$。您遇到的问题是.+会匹配它能匹配的所有内容,包括尾随引号。随后的子句"?将被忽略,因为根据问号,它是可选的。
使用[^"]+也可以,因为这意味着“任何不是双引号的非空字符串”。
发布于 2013-01-30 10:21:36
如果要查找文字问号(或正则表达式引擎专用的任何其他符号),则必须转义字符:\?
https://stackoverflow.com/questions/14595613
复制相似问题