PHP正则表达式查找并附加到字符串

时间:2010-03-31 05:01:25

标签: php regex string

我正在尝试使用正则表达式(preg_match和preg_replace)来执行以下操作:

找到这样的字符串:

{%title=append me to the title%}

然后提取title部分和append me to the title部分。然后我可以用它来执行str_replace()等等。

鉴于我在正则表达式上很糟糕,我的代码失败了......

 preg_match('/\{\%title\=(\w+.)\%\}/', $string, $matches);

我需要什么样的模式? :/

3 个答案:

答案 0 :(得分:1)

我认为这是因为\w运算符与空格不匹配。因为等号之后的所有内容都需要在结束%之前适合,所以它必须匹配这些括号内的任何内容(否则整个表达式无法匹配)。

这段代码对我有用:

$str = '{%title=append me to the title%}';
preg_match('/{%title=([\w ]+)%}/', $str, $matches);
print_r($matches);

//gives:
//Array ([0] => {%title=append me to the title%} [1] => append me to the title ) 

注意使用+(一个或多个)表示空表达式,即。 {%title=%}不匹配。根据您对空白区域的期望,您可能希望在\s字符类之后使用\w而不是实际的空格字符。 \s将匹配制表符,换行符等。

答案 1 :(得分:1)

您可以尝试:

$str = '{%title=append me to the title%}';

// capture the thing between % and = as title
// and between = and % as the other part.
if(preg_match('#{%(\w+)\s*=\s*(.*?)%}#',$str,$matches)) {
    $title = $matches[1]; // extract the title.
    $append = $matches[2]; // extract the appending part.
}

// find these.
$find = array("/$append/","/$title/");

// replace the found things with these.
$replace = array('IS GOOD','TITLE');

// use preg_replace for replacement.
$str = preg_replace($find,$replace,$str);
var_dump($str);

输出:

string(17) "{%TITLE=IS GOOD%}"

注意:

在你的正则表达式中:/\{\%title\=(\w+.)\%\}/

  • 没有必要逃避% 不是元字符。
  • 无需转义{}。 这些是元字符,但仅限于 用作量词的量词 {min,max}{,max}{min,}{num}。所以在你的情况下,他们会受到字面意思的对待。

答案 2 :(得分:1)

试试这个:

preg_match('/(title)\=(.*?)([%}])/s', $string, $matches);

匹配[1]有标题,匹配[2]有另一部分。