Preg_replace标记用HTML标记替换破折号

时间:2014-08-06 19:35:26

标签: php html regex wordpress preg-replace

我部分被禁用了。我在&text;&#39; text&#39;中写了很多wordpress帖子。模式和保存键入我将使用速记强调和强标签。例如。我会为-this-撰写<em>this</em>

我想在wordpress中添加一个函数来正则表达式替换具有一对破折号和适当的html标记的单词。对于初学者,我想将-this-替换为<em>this</em>

例如:

-this-变为<em>this</em>

-this-.变为<em>this</em>.

我能弄清楚的是如何替换边界字符。我希望它匹配字符串,但之后立即保留字符。

 $pattern = '/\s\-(.*?)\-(\s|\.)/';
 $replacement = '<em>$1</em>';
 return preg_replace($pattern, $replacement, $content);

...这是&#39;搜索&#39;好的,但它无法让我获得空间或时间段。

编辑:想要一个空格作为起始边界然后一个空格或一个句号或者一个逗号或一个分号作为结束边界的原因是为了防止真正用连字符的单词出现问题。

所以伪代码: 1.找到空格+字符串+(空格或标点符号) 2.替换为空格+ open_htmltag + string + close_htmltag +无论下一个字符是什么。

想法?

3 个答案:

答案 0 :(得分:2)

  
    

以空格作为起始边界,然后是空格或句号或逗号或分号作为结束边界

  

您可以尝试捕获以<em>$1</em>$2替换的群组。

[ ]-([^-]*)-([ .,;])

DEMO

示例代码:

$re =      "/-([^-]*)-([ .,;])/i";
$str = " -this-;\n -this-.\n -this- ";
$subst = '<em>$1</em>$2';

$result = preg_replace($re, $subst, $str);

注意:使用匹配任何空白字符\s

的单个空格而不是[\r\n\t\f ]

由o / p编辑:不需要打开空格作为分隔符。这是胜利的答案。


你可以尝试使用 Positive Lookahead ,只使用一个捕获组。

-([^-]*)-(?=[ .,;])

替换字符串:<em>$1</em>

DEMO

答案 1 :(得分:1)

您可以使用此正则表达式:

(-)(.*?)(-)

检查替换部分:

<强> Working demo

enter image description here

修改:作为改进,您还可以使用-(.*?)-并利用捕获组\1

答案 2 :(得分:0)

在下面的代码中,正则表达式模式将从连字符开始并收集任何非连字符,直到下一个连字符出现。然后它将收集的文本包装在em标记中。连字符被丢弃。

注意:如果您将连字符用于其预期目的,则可能会导致问题。你可能想为它设计一个转义字符。

  $str = "hello -world-. I am -radley-.";

  $replace = preg_replace('/-([^-]+?)-/', '<em>$1</em>', $str);

  echo $str; // no formatting
  echo '<br>';
  echo $replace; // formatting

结果:

hello -world-. I am -radley-.

hello <em>world</em>. I am <em>radley</em>.