例如,您有以下字符串:
$text = "word1:text1@atpart/foo/do/myfood$textfinal";
该功能将起作用:
$parts = array();
extract( $regular_exp, $text, $parts );
在parts数组中,我们将得到:
$parts[0] = "word1";
$parts[1] = "text1";
$parts[2] = "atpart";
$parts[3] = "/foo/do/myfood";
$parts[4] = "textfinal";
谢谢!
答案 0 :(得分:4)
这可能不是您所追求的,但您显示的格式看起来几乎就像前面有username:password@domain
身份验证的网址。如果您可以将最后$
作为?
投放,则可能可以使用parse_url()
来解析它。
$string = "word1:text1@atpart/foo/do/myfood?textfinal"; // notice the ?
$string = "none://".$string; // We need to add a protocol for this to work
print_r (parse_url($string));
结果:
Array (
[scheme] => none
[host] => atpart
[user] => word1
[pass] => text1
[path] => /foo/do/myfood
[query] => textfinal )
这样做的好处是,如果输入数据中可能缺少一个或多个部分,则它非常灵活。如果这不是问题,那么正则表达式可能更方便。
答案 1 :(得分:2)
试
$parts = preg_split('/[:@\$]+/', $text);
答案 2 :(得分:0)
没有更多详细信息,这与提议的示例匹配:
preg_match('#(.*?):(.*?)@(.*?)(/.*?)\$(.*)#', $text, $parts);
请注意,您将获得从索引1开始而不是0的部分。
答案 3 :(得分:0)
$delims=':@$';
$word = strtok('word1:text1@atpart/foo/do/myfood$textfinal',$delims);
while ( $word!==false ) {
foreach( explode('/',$word,2) as $tmp){
$words[]=$tmp;
}
$word = strtok($delims);
}
var_dump($words);
一方面,这可能是矫枉过正。另一方面,根据字符串的不同,这可能会更灵活。