php - PCRE 正则表达式删除点之前的空格,并在其后面添加一个,但也不影响省略号

标签 php regex pcre

我不太热衷于正则表达式,我对此只有一些中间知识,只是为了帮助我处理日常 PHP 编程。但我面临的这个问题超出了我目前的知识范围。

我创建了一个正则表达式模式来查找 word .Word 格式的任何字符并将其替换为 word。词

正则表达式为 [\t]*\.[\t]* 并替换为 '。 '

但是,我刚刚注意到上面将省略号三个点 (...) 变成了 。 。 。

我认为这可以通过正向(或负向)前向(或后向)来解决,但我从未使用过这些方法,尽管我进行了一些尝试,但我找不到正确的组合来排除省略号' 三个点与我的正则表达式匹配。

任何帮助将不胜感激,尤其是。如果您可以将正确的缺失部分添加到我当前的正则表达式中以覆盖省略号的情况,而不是建议完全不同的部分。 TIA

最佳答案

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

(?:[ \t]+\.[ \t]*)|(?:[ \t]*\.[ \t]+)|(?<=\w)\.(?=\w)

'. '作为替换

demo

输入:

word      .Word #case 1
word...        #case 2 (nothing should be done here)
word      .     Word #case3
word.   Word #case 4
word.Word #case5

输出:

word. Word
word...
word. Word
word. Word
word. Word

说明:

  • 使用当前的正则表达式 ...最终被处理,并在每个 . 之后添加一个空格,因此我们必须添加一些约束来避免它。
  • (?:[ \t]+\.[ \t]*)将处理案件#1#3 (强制要求在点之前至少有一个空格或制表符)
  • (?:[ \t]*\.[ \t]+)将处理案件#4#3 (强制要求点后至少有一个空格或制表符)
  • 剩余案例#5将会遇到(?<=\w)\.(?=\w)在其中添加lookbehind/lookahead约束(在 . 周围的字符上)以避免匹配 ...

请告诉我这是否清楚以及是否适合您!干杯。

关于php - PCRE 正则表达式删除点之前的空格,并在其后面添加一个,但也不影响省略号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575110/

相关文章:

php - 使用 PHP 计算两个日期之间的天数(以月为单位)

php - preg_replace() 如何理解 $replacement 参数中的 '${1}1,$3'?

java - 如何替换 String 中第 n 次出现的字符?

php - 什么是 PHP PCRE 函数上的 $0

php - "empty"模式代表什么?

php - 这种密码存储方式安全吗?

php - 以特定间隔合并数组

php - 简单的 mysqli 查询不起作用

php - 如何将长数字字符串分成月份

python - 为什么表达包含 '\' 的正则表达式在没有原始字符串的情况下也能工作。