gpt4 book ai didi

php - 正则表达式仅匹配前面有空格或什么都没有的特定字符(行首)

转载 作者:可可西里 更新时间:2023-10-31 22:46:27 24 4
gpt4 key购买 nike

考虑以下推文:

RT @username This is my tweet
Check this! RT @username This is my tweet
I have PART 2 downloaded

preg_replace() 调用中,我使用正则表达式将 RT(常见的 retweet 语法)替换为 {RT }。它几乎可以工作,但是,它也匹配上一条推文中 PART 中的 RT:

  • I have PART 2 downloaded 变为 I have PA{RT} 2 downloaded

我希望正则表达式在 RT 前只允许 nothing(字符串的开头)或 空格 (U+0020)

当前的 preg_replace() 调用:

echo preg_replace("(\RT(?=\s)/", '{RT}', $tweet);

最佳答案

在正则表达式中的 RT 之前添加 (^|[ ]) 以匹配字符串的开头 空格。在方括号之间添加更多字符以将它们也包括在内(例如 (^|[ _]) 也匹配下划线。

说明

  • ^ 匹配字符串开头
  • [ ] 匹配空格 (U+0020) (或 [] 之间的任何其他字符)
  • ( & ) 创建一个
  • | between ( & ) 表示

所以...

  • (^|[ ]) 表示,它是字符串的开始 空格 (U+0020)

新正则表达式

echo preg_replace("/(^|[ ])(\RT(?=\s))/", '$1{RT}', $tweet);

注意:@DVK 提到,只匹配字符串开头和空格(而不是单词边界)是不好的做法。因为 OP 要求特定字符,所以按单词边界匹配在技术上是不正确的。然而,由于@DVK 确实提出了一个有效的观点,我想提一下,在许多情况下使用 (\b) 而不是 (^|[ ]) 将提供更符合您“正确”想法的结果(例如“太棒了,RT 一些推文。”)。不过,请记住,此说明是在被接受后添加的,绝不是该特定问题答案的一部分——它仅用于帮助那些可能遇到类似但不同问题的答案的人。

关于php - 正则表达式仅匹配前面有空格或什么都没有的特定字符(行首),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com