【问题标题】:Make the first sentence in each paragraph an <H3> by referencing two break tags and the next period, question mark, or exclamation mark通过引用两个中断标记和下一个句号、问号或感叹号,使每个段落中的第一句成为 <H3>
【发布时间】:2019-02-18 12:21:21
【问题描述】:

我试图在给定文档的每个段落的第一句之后插入一个 HTML 标记。

我想出的代码(我不是程序员)正在运行。

$insert_pos 是最后插入标签的位置。之所以需要它,是因为大多数文档中都有不止一个段落。

现在我还需要检查“?” (也可能是“!”)。

$insert_pos = strpos($content, ".", $insert_pos) + 1;
$content= substr_replace( $content, "</tag>", $insert_pos,0 );

一些上下文:

每个 CMS 都会使用&lt;/br&gt;&lt;br /&gt; 生成一个段落。因此,文档将具有以下格式:

 Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. </br><br />Lorem ipsum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. </br><br />voluptua.

我需要&lt;br /&gt;.!? 之间的每个句子成为&lt;h3&gt; 标记内的文本。所以格式为&lt;h3&gt;Lorem ipsum.&lt;/h3&gt;

【问题讨论】:

  • strpos 不能在一次调用中做到这一点 - 所以你需要一个你正在寻找的每个可能的字符。将字符放在一个数组中可能是有意义的,这样你就可以遍历它。不清楚您是否只需要在找到任何这些字符的每个位置执行某些操作,或者只需要在找到任何这些字符的第一个位置执行操作。对于后者,您可能希望先收集所有位置,然后找出最小值。
  • 也许你可以使用strpbrk然后strpos
  • 也许这里给出的答案可以帮助你:stackoverflow.com/questions/1252693/…
  • >>您可能想先收集所有位置,然后找出最小值。php.net@04FS上的文档中蒸发

标签: php replace strpos punctuation html-heading


【解决方案1】:

要将替换应用于每个新段落(两个中断标记后的内容或句子的开头,匹配这些出现,然后使用\K“重新开始匹配”。然后匹配零个或多个不在标点符号列表,然后是句尾标点符号。$0 是匹配的子字符串,用于替换字符串,因此实际上不会丢失任何内容。

代码:(Demo)

$content = "What in the world? I don't know.<br><br>This is paragraph number 2!  What a fascinating read.<br><br>No matter how many paragraphs, look for one of the three sentence ending punctuations after a fully empty line.  Good stuff!";

$content = preg_replace('~(?:^|<br><br>)\K[^.?!]*[.?!]~', '<h3>$0</h3>', $content);
//                             ^^^^^^^^-- </br><br />  to be more specific
echo $content;

输出:

<h3>What in the world?</h3> I don't know.<br><br><h3>This is paragraph number 2!</h3>  What a fascinating read.<br><br><h3>No matter how many paragraphs, look for one of the three sentence ending punctuations after a fully empty line.</h3>  Good stuff!

【讨论】:

  • 嘿 mickmackusa,这太棒了!但它只改变了整个文档的第一句话。因此,如果我想在每个段落中使用 preg_replace() 一个,我需要从文档中删除该段落,然后使用 preg_replace 并将其存储在一个新的变量中,然后重复并附加以下段落。对吗?
  • 每个 CMS 都会使用 '
    ' 生成一个段落。因此,文档将具有以下格式 Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua。
    Lorem ipsum。 Lorem ipsum dolor sit amet, consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua。
    voluptua。
    我需要
    和“。”之间的每个句子。或者 ”!”或者 ”?”为H3。所以格式为

    Lorem ipsum

    .
  • 我并不特别。这个社区到处都是知识渊博的人。尊重每个人,您将获得源源不断的开发支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2012-12-07
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多