我需要从下面的行中获得这些部分:Jony,Smith和example-free@wpdevelop.com
,正如您所看到的,它们位于^和〜之间。
text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~
这样做我试过了:
preg_match_all ('/\^(.*?)\~/', $row['form'], $res);
对于显示的名称: ^ name1 ^ Jony~ 对于第二个名称: ^ secondname1 ^ Smith~ 和电子邮件: ^email1^example-free@wpdevelop.com!
正如你所看到的,“text”这个词已经消失了,但不是^,name1,secondname1,email1和〜
你能说出我正则表达中的错误吗?
答案 0 :(得分:3)
将.*
更改为[^^]*
,意思是“任何字符不包括 ^
”
<?php
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~';
preg_match_all ('/\^([^^]*?)\~/', $str, $res);
var_dump($res);
/*
//output
$ php scratch.php
array(2) {
[0]=>
array(3) {
[0]=>
string(6) "^Jony~"
[1]=>
string(7) "^Smith~"
[2]=>
string(28) "^example-free@wpdevelop.com~"
}
[1]=>
array(3) {
[0]=>
string(4) "Jony"
[1]=>
string(5) "Smith"
[2]=>
string(26) "example-free@wpdevelop.com"
}
}
*/
答案 1 :(得分:1)
您的正则表达式必须为'/\^([^\^]*?)\~/'
,您使用的是.
,后者会选择^
。您无需使用^
而不是[^\^]
选择.
。
答案 2 :(得分:1)
这样更好:
<?php
$string = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~';
preg_match_all('/\^.+?\^(.+?)~/', $string, $matches);
var_dump($matches);
$ match中的结果将是:
array(2) {
[0]=>
array(3) {
[0]=>
string(12) "^name1^Jony~"
[1]=>
string(19) "^secondname1^Smith~"
[2]=>
string(35) "^email1^example-free@wpdevelop.com~"
}
[1]=>
array(3) {
[0]=>
string(4) "Jony"
[1]=>
string(5) "Smith"
[2]=>
string(26) "example-free@wpdevelop.com"
}
}
我将此。+?\ ^部分添加到正则表达式中,它匹配两个^字符之间的文本。