我有一个带有一些代码的字符串(例如:«USER_ID#USERNAME#STATUS»)用于替换,如下例所示:
您好«USER_ID#USERNAME#STATUS»,您喜欢«PROD_ID#PRODNAME#STATUS»吗?
我需要找到一种方法来获取所有代码以供将来替换。
我可以用这个正则表达式轻松找到一个代码:
/«(.*)#(.*)#(.*)»/
但是找不到使用 preg_match_all 获取所有代码的方法。
有人能帮我吗?我正在使用 PHP。
谢谢
我有一个带有一些代码的字符串(例如:«USER_ID#USERNAME#STATUS»)用于替换,如下例所示:
您好«USER_ID#USERNAME#STATUS»,您喜欢«PROD_ID#PRODNAME#STATUS»吗?
我需要找到一种方法来获取所有代码以供将来替换。
我可以用这个正则表达式轻松找到一个代码:
/«(.*)#(.*)#(.*)»/
但是找不到使用 preg_match_all 获取所有代码的方法。
有人能帮我吗?我正在使用 PHP。
谢谢
$string = "Hello «USER_ID#USERNAME#STATUS», do you like «PROD_ID#PRODNAME#STATUS»?";
preg_match_all('/«(.*)#(.*)#(.*)»/U',$string,$matches);
echo '<pre>';
var_dump($matches);
echo '</pre>';
给
array(4) {
[0]=>
array(2) {
[0]=>
string(25) "«USER_ID#USERNAME#STATUS»"
[1]=>
string(25) "«PROD_ID#PRODNAME#STATUS»"
}
[1]=>
array(2) {
[0]=>
string(7) "USER_ID"
[1]=>
string(7) "PROD_ID"
}
[2]=>
array(2) {
[0]=>
string(8) "USERNAME"
[1]=>
string(8) "PRODNAME"
}
[3]=>
array(2) {
[0]=>
string(6) "STATUS"
[1]=>
string(6) "STATUS"
}
}
注意 Ungreedy 开关的使用。
我相信很快就会有人修改正则表达式,使其本质上是不贪婪的
尝试
preg_match_all('/«(?<id>.*?)#(?<username>.*?)#(?<status>.*?)»/',$string,$matches);
echo $matches[0]['username'];
//And dont forget you have to loop.
foreach($matches as $match)
{
echo $match['username'];
}
:)
array(7) {
[0]=>
array(2) {
[0]=>
string(27) "«USER_ID#USERNAME#STATUS»"
[1]=>
string(27) "«PROD_ID#PRODNAME#STATUS»"
}
["id"]=>
array(2) {
[0]=>
string(7) "USER_ID"
[1]=>
string(7) "PROD_ID"
}
[1]=>
array(2) {
[0]=>
string(7) "USER_ID"
[1]=>
string(7) "PROD_ID"
}
["username"]=>
array(2) {
[0]=>
string(8) "USERNAME"
[1]=>
string(8) "PRODNAME"
}
[2]=>
array(2) {
[0]=>
string(8) "USERNAME"
[1]=>
string(8) "PRODNAME"
}
["status"]=>
array(2) {
[0]=>
string(6) "STATUS"
[1]=>
string(6) "STATUS"
}
[3]=>
array(2) {
[0]=>
string(6) "STATUS"
[1]=>
string(6) "STATUS"
}
}