我需要提取一个用逗号或逗号和空格分隔的字符串。 例如:
<?php
//regexp
$regexp = "/(select\s+(?<name>[a-z0-9]+)\s+(?<values>[^\d]+[a-z0-9]+\s*(\s*,|\s*$)))/";
//text
$text = "select this string1,string_2,string_3 ,string_4, string5,string_6";
//prepare
$match = array();
preg_match( $regexp , $text , $match );
//print
var_dump( $match);
?>
我创建了这个正则表达式:
(?<values>[^\d]+[a-z0-9]+\s*(\s*,|\s*$))
但这并不完美。
谢谢!
答案 0 :(得分:4)
我会使用preg_split:
$text = "select this string1,string_2,string_3 ,string_4, string5,string_6";
$stringArray = preg_split("/,\s*/",$text);
但是在每个逗号之后拆分然后修剪结果会更容易:
$stringArray = explode(",",$text);
答案 1 :(得分:1)
如果您想检查是否只获得字母数字字符,建议您使用~(?|select ([^\W_]+) | *([^\W,]+) *,?)
之类的内容。例如:
$subject = 'select this string1,string_2,string_3 ,string_4, string5,string_6';
$pattern = '~(?|select ([a-z][^\W_]*+) | *+([a-z][^\W,_]*+) *+,?)~i';
preg_match_all($pattern, $subject, $matches);
if (isset($matches[1])) {
$name = array_shift($matches[1]);
$strings = $matches[1];
}
或另一种方式:
$pattern = '~select \K[a-z][^\W_]*+| *+\K[a-z][^\W,]*+(?= *,?)~';
preg_match_all($pattern, $subject, $matches);
if (isset($matches[0])) {
$name = array_shift($matches[0]);
$strings = $matches[0];
}