PHP Regex将选择移动到字符串中的不同位置

时间:2011-11-07 12:59:17

标签: php regex

我目前有这个正则表达式:

$text = preg_replace("#<sup>(?:(?!</?sup).)*$key(?:(?!</?sup).)*<\/sup>#is", '<sup>'.$val.'</sup>', $text);

正则表达式的目标是取<sup>[stuff here]$key[stuff here]</sup>并删除[stuff here]位置内的内容。

我真正想要做的是,不是删除$key[stuff here]</sup>,而只是将内容移至$key</sup>[stuff here]

我已尝试使用$1-$4\\1-\\4,我似乎无法在</sup>

之后添加文字

2 个答案:

答案 0 :(得分:1)

试试这个;

$text = preg_replace(
  '#<sup>((?:(?!</?sup).)*)'.$key.'((?:(?!</?sup).)*)</sup>#is', 
  '<sup>'.$val.'</sup>\1\2', 
  $text
);

(?:...)*位实际上不是子模式,因此不能使用反向引用。此外,如果您对字符串文字使用'而不是',则只需要转义\和'

//干杯,莫滕

答案 1 :(得分:0)

你必须结合preg_match();和preg_replace();

  1. 您将所需内容与preg_match()匹配并存储到变量中。
  2. 您使用相同的正则表达式替换为空字符串。
  3. 将您存储的变量附加到最后。