0

所以我有这个正则表达式:

$text = '"sadfsafsafsafsaf"';
$text2 = '"sadfsafsafsafsaf';
$matches = array();

preg_match('/"(.+)"?/', $text, $matches);

在这种情况下,我打算只捕获不带引号的sadfsafsafsafsaf,因此在我使用$text$text2进入的两种情况下,preg_match()我都希望匹配的输出$matches[1]只是sadfsafsafsafsaf

但是,当我使用 时$text,匹配的值将改为 sadfsafsafsafsaf (即最后会有另一个引号)

有没有办法改变我的正则表达式,以便在这两种情况下都是sadfsafsafsafsaf?

注意:在有人问为什么不直接使用trim()... 这是因为我只想去掉第一个外部引号。

4

4 回答 4

0

[^"]+将捕获任意数量的相邻非引号。

于 2013-01-30T02:20:40.640 回答
0

尝试更改.+.*,并将 a 添加$到模式的末尾。您遇到的问题是.+匹配所有可能的内容,包括尾随引号。随后的子句 ,"?将被忽略,因为它是可选的,由于问号。

使用[^"]+也可以,因为这意味着“任何不是双引号的非空字符串”。

于 2013-01-30T02:20:54.693 回答
0

如果要查找文字问号(或任何其他正则表达式引擎特殊的符号),则必须转义该字符:\?

于 2013-01-30T02:21:35.567 回答
0

使用OR

/"(.*)"|(.*)/

如果未找到 cotes,将在 cotes 内部或外部获取文本。

于 2013-01-30T02:24:50.367 回答