我有一个像
这样的字符串"'Joe'&@[Uk Customers.First Name](contact:16[[---]]first_name) +@[Uk Customers.Last Name](contact:16[[---]]last_name)"
我的要求是开始寻找模式
@[A.B](contact:**digit**[[---]]**field**)
单个字符串中可以有许多模式。
并使用由数字和字段值
生成的动态文本替换为新字符串(应替换整个模式)以上字符串的示例有两个匹配
第一场比赛是:数组(数字 => 16,字段 => first_name)
第二场比赛是:数组(数字 => 16,字段 => last_name)
在某处,我的规则很少
如果数字为16且字段为first_name,则用“John”替换模式 如果digit为16且field为last_name,则用“Doe”替换模式
所以输出字符串将是“'Joe'& John + Doe”
提前致谢。
答案 0 :(得分:2)
匹配部分相当简单。这样就可以了:
@\[[^.]+\.[^.]+\]\(contact:(\d+)\[\[---\]\]([^)]+)\)
在PHP(以及支持命名捕获组的其他语言)中,您可以执行此操作以使数组包含“digit”和“field”键:
@\[[^.]+\.[^.]+\]\(contact:(?<digit>\d+)\[\[---\]\](?<field>[^)]+)\)
示例PHP代码:
$regex = '/@\[[^.]+\.[^.]+\]\(contact:(?<digit>\d+)\[\[---\]\](?<field>[^)]+)\)/';
$text = '"\'Joe\'&@[Uk Customers.First Name](contact:16[[---]]first_name) +@[Uk Customers.Last Name](contact:16[[---]]last_name)"';
preg_match_all($regex, $text, $matches, PREG_SET_ORDER);
var_dump($matches);
结果:
array(2) {
[0]=>
array(5) {
[0]=>
string(55) "@[Uk Customers.First Name](contact:16[[---]]first_name)"
["digit"]=>
string(2) "16"
[1]=>
string(2) "16"
["field"]=>
string(10) "first_name"
[2]=>
string(10) "first_name"
}
[1]=>
array(5) {
[0]=>
string(53) "@[Uk Customers.Last Name](contact:16[[---]]last_name)"
["digit"]=>
string(2) "16"
[1]=>
string(2) "16"
["field"]=>
string(9) "last_name"
[2]=>
string(9) "last_name"
}
}
我不清楚你想要用于替换的逻辑,所以如果没有一些澄清,我恐怕无法提供帮助。