Preg_match问题

时间:2010-10-31 13:51:23

标签: php preg-match

我确定有人已经问过这个问题了,但在谷歌上搜索了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.'

2 个答案:

答案 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;