【问题标题】:Regex to insert dot (.) after characters, before new line正则表达式在字符后、换行前插入点 (.)
【发布时间】:2018-06-01 09:56:29
【问题描述】:

我正在重新格式化一些文本,有时我有一个字符串,其中有一个不以点结尾的句子。

为此,我正在运行各种检查,我还想要“在换行之前的最后一个字符后添加点”

我不确定如何为此形成正则表达式:]

$string = preg_replace("/???/", ".\n", $string);

【问题讨论】:

  • 举个例子字符串

标签: php regex


【解决方案1】:

试试这个:

$string = preg_replace("/(?<![.])(?=[\n\r]|$)/", ".", $string);

负向查看(?&lt;![.]) 正在检查前一个字符不是.

正向预测 (?=[\n\r]|$) 正在检查下一个字符是换行符还是字符串结尾。

【讨论】:

  • 除了使用 re.sub 之外,你会怎么做? $string = preg_replace("/(?
【解决方案2】:

我想是这样的:

<?php
$string = "Add dot after last character before new line\n";
$string = preg_replace("/(.)$/", "$1.\n", $string);
print $string;
?>

这样,句中的单词line之后和\n之前会添加点。

演示:http://ideone.com/J4g7tH

【讨论】:

  • 试试$string = "before new line."
  • 这将在末尾添加一个额外的\n
【解决方案3】:

我愿意:

$string = "Add dot after last character before new line\n";
$string = preg_replace("/([^.\r\n])$/s", "$1.", $string);

【讨论】:

  • 很好。我认为它也处理空行。
【解决方案4】:

感谢所有答案,但没有一个人真正抓住了所有场景。

我使用单词边界正则表达式字符类摸索了一个好的解决方案:

// Add dot after every word boundary that is followed by a new line.
$string = preg_replace("/[\b][\n]/", ".\n", $string);

我猜[\b][\n] 也可以是不带方括号的\b\n

【讨论】:

    【解决方案5】:

    这对我有用:

    $content = preg_replace("/(\w+)(\n)/", "$1.$2", $content);
    

    它会匹配一个紧跟新行的单词,并在其间添加一个点。

    将匹配: Hello\n

    不匹配: Hello \n 或者 Hello.\n

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2018-04-24
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多