我有一个表单输入字段,可以接受来自用户的多个“标记”,有点像这个网站上的标记!因此,例如用户可以输入如下内容:
php mysql regex
......哪个好看&很容易将多个标签分开,因为我可以在空格上爆炸()。我最终会:
array('php', 'mysql', 'regex')
然而事情会变得复杂一些,因为用户可以使用逗号或分隔标记 空间和对多字标签使用双引号。
所以用户也可以输入:
php "mysql" regex, "zend framework", another "a, tag with punc $^&!)(123 *note the comma"
所有这些都是有效的。这应该产生:
array('php', 'mysql', 'regex', 'zend framework', 'another', 'a, tag with punc $^&!)(123 *note the comma')
我不知道如何编写一个正则表达式,它首先匹配双引号中的所有内容,然后在逗号或空格上爆炸字符串&最后匹配其他一切。我想我会使用preg_match_all()吗?
有人能指出我正确的方向!?非常感谢。
答案 0 :(得分:2)
试试这个正则表达式。我针对你的字符串对它进行了测试,它正确地取出了各个标签:
("([^"]+)"|\s*([^,"\s]+),?\s*)
此代码:
$string = 'php "mysql" regex, "zend framework", another "a, tag with punc $^&!)(123 *note the comma"';
$re = '("([^"]+)"|\s*([^,"\s]+),?\s*)';
$matches = array();
preg_match_all($re, $string, $matches);
var_dump($matches);
对我产生了以下结果:
array(3) {
[0]=>
array(6) {
[0]=>
string(4) "php "
[1]=>
string(7) ""mysql""
[2]=>
string(8) " regex, "
[3]=>
string(16) ""zend framework""
[4]=>
string(9) " another "
[5]=>
string(44) ""a, tag with punc $^&!)(123 *note the comma""
}
[1]=>
array(6) {
[0]=>
string(0) ""
[1]=>
string(5) "mysql"
[2]=>
string(0) ""
[3]=>
string(14) "zend framework"
[4]=>
string(0) ""
[5]=>
string(42) "a, tag with punc $^&!)(123 *note the comma"
}
[2]=>
array(6) {
[0]=>
string(3) "php"
[1]=>
string(0) ""
[2]=>
string(5) "regex"
[3]=>
string(0) ""
[4]=>
string(7) "another"
[5]=>
string(0) ""
}
}
希望有所帮助。