我确定有人已经问过这个问题了,但在谷歌上搜索了1个多小时后,我决定在这里提出我的问题。
我想对一个不同字符串/文本的数组进行迭代。 这些文本包含## valuetoreplace ##和#valuetoreplace#
的字符串我想要preg_matches:
$pattern = '/^#{1}+(\w+)+#{1}$/';
if(preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE))
{
// do something with the #values#
}
AND
$pattern = '/^#{2}+(\w+)+#{2}$/';
if(preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE))
{
//do something with the ##value##
}
这很有效。 现在我唯一的问题如下:
当我有一个像
这样的字符串时$valueToMatch = 'proceding text #value#';
我的preg_match不能再找到我的价值了(因为我使用的是^和$)。
问题:我怎样才能找到#value#
和##value##
,而不必担心这些单词是否在(多行)值的中间?
*此外:
我想要的是找到模式并将#value#替换为db值,将##value##
替换为数组值。
例如:
$thingsToReplace = 'Hello #firstname# #lastname#,
How nice you joined ##namewebsite##.';
应该是
'Hello John Doe,
How nice you joined example.com.'
答案 0 :(得分:1)
按此顺序尝试:/##([^#]+)##/
和/#([^#]+)#/
。
答案 1 :(得分:0)
也许很高兴知道其他访客我是如何做到的:
foreach($personalizeThis as $key => $value)
{
//Replace ##values##
$patternIniData = '/#{2}+(\w+)#{2}/';
$return = 'website'; //testdata
$replacedIniData[$key] = preg_replace($patternIniData, $return, $value);
//Replace #values#
$pattern = '/#{1}+(\w+)#{1}/';
$return = 'ASD'; //testdata
$replacedDbData[$key] = preg_replace($pattern, $return, $replacedIniData[$key]);
}
return $ replacementDbData;