我正在处理PHP应用程序中的一堆Tweets。使用regex用链接替换hashtag很简单,但是对于大多数为Twitter hashtag建议的正则表达式,这些regex太简单了。试图包含非ASCII字母,检查URL等,我意识到Twitter API返回“实体”,所有这些都已经为您处理了。
下面的示例是具有#something
和#else
标签的Tweet的片段,其中包含字符串位置(索引)。
["entities"]=>
object(stdClass)#89 (4) {
["hashtags"]=>
array(2) {
[0]=>
object(stdClass)#90 (2) {
["text"]=>
string(12) "something"
["indices"]=>
array(2) {
[0]=>
int(110)
[1]=>
int(123)
}
}
[1]=>
object(stdClass)#91 (2) {
["text"]=>
string(7) "else"
["indices"]=>
array(2) {
[0]=>
int(126)
[1]=>
int(134)
}
}
}
我只是想不出一个好的、有效的解决方案来使用这些数据来替换源字符串上的哈希标签。一定是有可能的?
当然,我了解substr_replace
,但是在进行第一个替换之后,字符串位置将不再与下一个替换匹配。
也许可以在每次更换后计算出新的职位,但那时我想征求你的意见。
发布于 2016-06-13 08:03:23
2.我可以想到的两个选择:
1.)使用偏移量来修正差异:(口头代码)
$offset = 0;
while (hashtagToReplace){
substr_replace($hashtagPosition + $offset, $htmlOfHashtag)
$offset -= $length_of_replaced_word;
$offset += $length_of_inserted_html;
}
2.)或者更简单的方法:向后替换,这样更改“稍后”这个词就不会影响原文前面的单词的位置。(n to 0
而不是0 to n
) (首先在126个位置插入1000个字符,不会更改110个字符)
https://stackoverflow.com/questions/37794011
复制