【发布时间】:2013-02-21 11:17:23
【问题描述】:
我有字符串列表(在 PHP 中):
a2c
bdR
dDv
"ddv
啊啊
“啊啊”
什么是正则表达式只匹配不以引号开头的字符串?在这个例子中,有四个这样的字符串。所以,我只需要匹配四个字符串(计算它们)。对于这个列表,我正在使用循环,但我现在只需要 RegEx。谢谢!
我试过了
[^"]([a-zA-Z0-9]*)*
但它仍然匹配所有字符串,即使是那些以引号开头的字符串。
【问题讨论】:
我有字符串列表(在 PHP 中):
a2c
bdR
dDv
"ddv
啊啊
“啊啊”
什么是正则表达式只匹配不以引号开头的字符串?在这个例子中,有四个这样的字符串。所以,我只需要匹配四个字符串(计算它们)。对于这个列表,我正在使用循环,但我现在只需要 RegEx。谢谢!
我试过了
[^"]([a-zA-Z0-9]*)*
但它仍然匹配所有字符串,即使是那些以引号开头的字符串。
【问题讨论】:
您缺少字符串锚^ 的开头,这意味着您的表达式将匹配一个字符串,如果它出现在其中任何位置。显然,“非引号后跟任何内容,包括字符串结尾”的序列出现在所有示例输入中。
这个表达式会匹配你想要的:
^[^"]
它只匹配第一个字符不是双引号的任何输入。其他角色就不用管了。
【讨论】:
试试看:
^[^"](.*)/gm
(如果变量中有多个字符串。)
【讨论】:
(.*) 有什么想法?有必要吗?在另一个捕获组中捕获所有字符除了第一个是否有用?
$strigs_arr = array();
foreach($strings as $str){
//$str = '"aaa';
preg_match('/^(?P<string>[^"].*)/',$str,$match);
$strigs_arr[] = $match['string'];
}
echo "<pre>";
print_r($strigs_arr);
【讨论】: