提问人:Jamie 提问时间:6/1/2023 最后编辑:mickmackusaJamie 更新时间:6/1/2023 访问量:61
添加换行符以分隔文本,并仅添加出现在字符串末尾的主题标签
Add newlines to separate text and only hashtags that appear at the end of the string
问:
我已经尝试了几个正则表达式,但无法修复这个问题:
在主题标签开始之前,我需要一个输入行(所以有一些空间)。
例:
在夏季保持幼犬凉爽至关重要!尽量保持 他们尽可能地远离高温 - 保持房子凉爽, 如果可以的话,为他们提供阴凉处并运行风扇。#Dogs #Animals #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
应该是:
在夏季保持幼犬凉爽至关重要!尽量保持 他们尽可能地远离高温 - 保持房子凉爽, 如果可以的话,为他们提供阴凉处并运行风扇。
#Dogs #Animals #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
如果文本中有主题标签,则不应添加空格,例如(注意文本中的主题标签!
在夏季保持幼犬凉爽至关重要!尽量保持 它们尽可能远离热量 #possible - 保持房子凉爽, 如果可以的话,#provide 遮荫并为他们 #you #fan。#Dogs #Animals #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
如何使用正则表达式和PHP解决这个问题?
答:
您可以将一系列主题标签与正则表达式匹配:
(?:#\w+\s*)+$
#\w+
匹配单个主题标签\s*
匹配主题标签之间的可选空格+
在组匹配以下至少一个序列之后$
匹配输入字符串的末尾。
然后,您可以使用在此之前插入一个空行。preg_replace()
$text = preg_replace('/((?:#\w+\s*)+)$/', "\n\n$1", $text);
匹配一个空格,后跟一个或多个主题标签序列,直到字符串末尾。通知通过添加作为第四个参数来仅进行 1 次替换。preg_replace()
1
代码:(演示)
echo preg_replace('/ (?=(?:#[a-z]+\s*)+$)/i', "\n\n", $text, 1);
或者没有前瞻或替换限制:(演示)
echo preg_replace('/ ((?:#[a-z]+\s*)+)$/i', "\n\n$1", $text);
这两种方法都将用两个换行符干净地替换主题标签序列之前的空格。
评论