英文:
Add newlines to separate text and only hashtags that appear at the end of the string
问题
I need an enter line before the hashtags start (so there is some space).
Example:
> It's essential to keep your pup cool in the summer months! Try to keep
> them out of the heat as much as possible - keep the house cool,
> provide shade and run a fan for them if you can. #Dogs #Animals
> #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
Should be:
> It's essential to keep your pup cool in the summer months! Try to keep
> them out of the heat as much as possible - keep the house cool,
> provide shade and run a fan for them if you can.
>
#Dogs #Animals #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
If there is a hashtag in the text it should not add whitespace, for example (note hashtags in text!):
> It's essential to keep your pup cool in the summer months! Try to keep
> them out of the heat as much as #possible - keep the house cool,
> #provide shade and run a #fan for them if #you can. #Dogs #Animals #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
如何使用正则表达式和PHP解决这个问题?
英文:
I've already tried a couple of regex but cannot fix this one:
I need an enter line before the hashtags start (so there is some space).
Example:
> It's essential to keep your pup cool in the summer months! Try to keep
> them out of the heat as much as possible - keep the house cool,
> provide shade and run a fan for them if you can. #Dogs #Animals
> #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
Should be:
> It's essential to keep your pup cool in the summer months! Try to keep
> them out of the heat as much as possible - keep the house cool,
> provide shade and run a fan for them if you can.
>
> #Dogs #Animals #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
If there is a hashtag in the text it should not add whitespace, for example (note hashtags in text!):
> It's essential to keep your pup cool in the summer months! Try to keep
> them out of the heat as much as #possible - keep the house cool,
> #provide shade and run a #fan for them if #you can. #Dogs #Animals #Summer #DogCare #Humidity #HeatStroke #Cooling #HeatExhaustion #StayCool #HealthyPups
How can I solve this with Regex and PHP?
答案1
得分: 2
你可以使用正则表达式来匹配一系列的哈希标签:
(?:#\w+\s*)+$
#\w+
匹配单个哈希标签\s*
匹配哈希标签之间的可选空白+
在分组后匹配至少一个这样的序列$
匹配输入字符串的末尾。
然后,你可以使用 preg_replace()
在这之前插入一个空行:
$text = preg_replace('/((?:#\w+\s*)+)$/', "\n\n$1", $text);
英文:
You can match a series of hashtags with the regexp:
(?:#\w+\s*)+$
#\w+
matches a single hashtag\s*
matches the optional whitespace between the hashtags+
after the group matches a sequence of at least one of these$
matches the end of the input string.
You can then use preg_replace()
to insert a blank line before this.
$text = preg_replace('/((?:#\w+\s*)+)$/', "\n\n$1", $text);
答案2
得分: 1
匹配一个空格,其后跟随一个或多个哈希标签序列,一直到字符串末尾。通过在第四个参数中添加 1
来通知 preg_replace()
仅进行一次替换。
代码: (演示)
echo preg_replace('/ (?=(?:#[a-z]+\s*)+$)/i', "\n\n", $text, 1);
或者不使用前瞻或替换限制:(演示)
echo preg_replace('/ ((?:#[a-z]+\s*)+)$/i', "\n\n$1", $text);
这两种方法都会将空格替换为两个换行符,位于哈希标签序列之前。
英文:
Match a space which is followed by one or more sequences of hashtags until the end of the string. Inform preg_replace()
to make only 1 replacement by adding 1
as the fourth parameter.
Code: (Demo)
echo preg_replace('/ (?=(?:#[a-z]+\s*)+$)/i', "\n\n", $text, 1);
Or without a lookahead or a replacement limit: (Demo)
echo preg_replace('/ ((?:#[a-z]+\s*)+)$/i', "\n\n$1", $text);
Both approaches will cleanly replace the space before the sequence of hashtags with the two newlines.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论