在preg_replace中执行PHP命令

时间:2012-07-22 10:15:25

标签: php preg-replace

是否可以执行php命令,例如strtolower()preg_replace()

我想用小写字母组成一个数组,而另一个用大写字母组成。问题是字母是动态变化的并且不是固定的,只有一个字保持不变但其余字不相同。


e.g。
arraypart1(应保持大写)(constantword)+ arraypart2(两者都应改为小写字母)

arraypart2也在改变字符数。

2 个答案:

答案 0 :(得分:0)

这并不是100%清楚你想做什么,但我认为它是如下:从一个字符串中提取单词,并根据它们在一个数组中的存在来提取小写/大写字母。 preg_replace_callback会帮助你。

PHP 5.3及更高版本:

$initial = "Mary had a little lamb";
$toupper = array("Mary", "lamb");
$tolower = array("had", "any");
$out = preg_replace_callback(
   "/\b(?P<word>\w+)\b/", // for every found word 
   function($matches) use ($toupper, $tolower) { // call this function 
      if (in_array($toupper, $matches['word'])) // is this word in toupper array?
          return strtoupper($matches['word']);

      if (in_array($tolower, $matches['word'])) // is this word in tolower array?
          return strtolower($matches['word']);

      // ... any other logic
      return $matches['word']; // if nothing was returned before, return original word
   },
   $initial);
print $out; // "MARY had a little LAMB"

如果您有其他需要考虑的数组,请将它们放在use语句中,以便它们在匿名函数中可用。

PHP&gt; = 4.0.5:

$initial = "Mary had a little lamb";
$toupper = array("Mary", "lamb");
$tolower = array("had", "any");

function replace_callback($matches) {  
   global $tolower, $toupper;
      if (in_array($toupper, $matches['word'])) // is this word in toupper array?
          return strtoupper($matches['word']);

      if (in_array($tolower, $matches['word'])) // is this word in tolower array?
          return strtolower($matches['word']);

      // ... any other logic
      return $matches['word']; // if nothing was returned before, return original word
   }

$out = preg_replace_callback(
   "/\b(?P<word>\w+)\b/", // for every found word 
   'replace_callback', // call this function
   $initial);
print $out; // "MARY had a little LAMB"

如您所见,没有任何重大变化,我只是用命名的函数替换了匿名函数。要为其提供其他字符串数组,请使用global关键字引用它们。

答案 1 :(得分:-1)

我希望我理解正确,preg_replace是一个函数,就像你可以做的所有其他函数一样:

preg_replace(strtolower($val),$pattern,$someString);
使用小写版preg_replace

调用

$val