所以我在使preg_replace正常工作时遇到问题。 我正在尝试创建自己的自定义markdown 我得到了想要的结果,因为它似乎在咳嗽。 但是,问题在于它会在块引用之外吐出用户输入。 这是我在说的一个例子。

这是我的代码。

<?php
$user_input = '> My quote';

$syntax = array(
    '/>\s+(.*?)/is'
);

$replace_with_html = array(
    '<blockquote><h3>Quote</h3><p>$1</p></blockquote>'
);

$replaced = preg_replace($syntax, $replace_with_html, $user_input);

print($replaced);

这是用户输入。

> My quote

这就是结果。

<blockquote><h3>Quote</h3><p></p></blockquote>My quote

我想要的是

<blockquote><h3>Quote</h3><p>My quote</p></blockquote>

如您所见,用户输入的位置错误(在最终HTML代码的末尾)。 有没有办法解决此问题并将其放置在段落标签中?

#1楼 票数:1 已采纳

您不需要创建数组,请使用以下命令:

$user_input = '> My quote';

$syntax = '/>\s+(.*)/s';

$replace_with_html = '<blockquote><h3>Quote</h3><p>$1</p></blockquote>';

$replaced = preg_replace($syntax, $replace_with_html, $user_input);

print($replaced);

它的工作方式相同:( Demo

$user_input = '> My quote';

$syntax = ['/>\s+(.*)/s'];

$replace_with_html = ['<blockquote><h3>Quote</h3><p>$1</p></blockquote>'];

$replaced = preg_replace($syntax, $replace_with_html, $user_input);

print($replaced);

无论哪种方式,您都希望图案中的点是贪婪的 ,然后删除?

如果不进行此调整,则仅替换模式的>\\s+部分。


也就是说,让我解决您尚未遇到的一些问题...

  1. 您如何知道在哪里停止报价?
  2. 如果有人想使用>来表示“大于”怎么办?

考虑一下这种新模式,以及它如何帮助您应对未来的挑战:

/^>\\s+(\\S+(?:\\s\\S+)*)/m 替换演示

在演示链接中,您将看到该模式将匹配(在>和1个或多个空格之后)一个或多个非空白字符(可选),然后是:单个空白字符(可以是空格/制表符/返回/换行符),然后一个或多个非空白字符。

实际上,这就是说,您要继续匹配“引号”文本,直到有2个或更多个连续的空格字符(否则到字符串末尾)。

此调整使您的用户能够准确/方便地引用其文本的格式,同时适当地保留无辜的>字符。

  ask by Oliver Twist translate from so

未解决问题?本站智能推荐:

3回复

preg_replace错误

我有一个需要替换的实体数组,但是只有每个实体的第一次出现(这就是为什么我使用preg_replace而不是str_replace )的原因,例如: 我收到以下错误: 逃脱括号并逃脱正则表达式中可能使用的任何其他字符的最佳方法是什么? 谢谢
1回复

preg_replace替换错误

我从一个朋友那里得到了一些帮助(他现在正在度假),但是我对preg_replace搜索和替换有问题。 我不知道为什么,但是它错误地替换了字符串,从而影响了应该替换的下一个字符串。 这基本上属于模板类,该类处理模板中的“ if”和“ else”查询。 模板: 当前输出将在以下位置:
2回复

preg_replace中的preg_replace

现在,我遇到了替换preg_match已经出现的字符串的问题。 可以说,我有BB代码[b]bla[/b]我有这部分与更换工作[b]与<b>还是让我们只说对他们做了所有测试目的[b]hi [b]test[/b][/b] ,最终结果是“ hi [b]test[/b] ”,所有内容均以粗
1回复

preg_replace条件

我正在使用 preg_replace 在图像下方添加文本。 我的正则表达式看起来像: 当 img 标签单独时,它按预期工作 但是,当图像包含在链接中时,文本也会被包裹在链接中: 有问题的图片哪种方法是防止这种行为的最佳方法?
2回复

preg_replace疑问

我做错了什么? 输出如下: 123.456.789-01 。 不格式化字符串!!
1回复

关于使用preg_replace()

为了进行测试,这是我在正则表达式上使用的代码: 现在,所打印的只是该字符串,就好像没有进行任何更改一样。 有什么想法吗?
5回复

preg_replace和日期

我想删除日期字符串中的所有-和/字符。 有人可以帮我吗? 这是我所拥有的,但不起作用。 另外,有没有办法将这两个表达式组合在一起,所以我不必有2个preg_replaces?
1回复

帮助preg_replace

我正在尝试转换URL,但是如果它们在src =“之后出现,则不可以。到目前为止,我已经有了这个... 它将转换URL,即使它在src =“之前