Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP str替换数组中的整个单词_Php_Arrays_Replace_Str Replace - Fatal编程技术网

PHP str替换数组中的整个单词

PHP str替换数组中的整个单词,php,arrays,replace,str-replace,Php,Arrays,Replace,Str Replace,编写instagram小部件给我留下了一个我自己无法解决的问题。我收到一个数组文本,其中包含图像描述和标记,如下所示: "text": "#Hashtag ! Lorem Ipsum dolor sit ament. #hash #myword #another #hashing", 和另一个包含所有标记的数组,如: "tags": [ "hashtag", "hash", "myword", "another",

编写instagram小部件给我留下了一个我自己无法解决的问题。我收到一个数组文本,其中包含图像描述和标记,如下所示:

"text": "#Hashtag ! Lorem Ipsum dolor sit ament. #hash #myword #another #hashing",
和另一个包含所有标记的数组,如:

 "tags": [
        "hashtag",
        "hash",
        "myword",
        "another",
        "hashing",
      ],
我的插件提供了一个选项来选择显示描述、标签或描述和标签

因此,我必须从标签中删除标签。到目前为止很容易。 首先,我获取所有标记并扩展它们,以使hashtag成为hashtag,并将它们保存到新数组alltags

之后,我用str_replace来替换文本中的所有hashtag。它需要stru_replace才能对按键敏感

$noTags = str_replace($alltags, "", $instagramText);
文本的输出是

tag ! Lorem Ipsum dolor sit ament.
因为散列标签的散列被散列标签替换

我找到了这个解决方案:这应该对我有用。但我有一个完整的数组来动态检查,而不仅仅是一个单词

现在的问题是: 如何检查整个单词而不是单词的一部分,以便哈希不会影响哈希标记

编辑 我想显示标签!乱数假文。。。。不仅如此!乱数假文。。。。这就是为什么我选择键敏感型——链接标签都是小写哈希,句子中使用的标签不是小写哈希。所以我可以删除那些我不需要构建正确句子的句子。 例如,它也可能是“我们需要你”,因此交付的hashtag可能是“我们需要你”。如果我把所有的输出都替换掉,我们就可以给你了。如果我用keysensitive替换整个单词,那就是我们想要你。希望你明白我想做什么


谢谢大家!

尝试使用RegEx剥离hashtag。您可以使用preg_replace功能,例如

$tags = implode('|', $tagsArray);
$noTags = preg_replace('/\#(' . $tags . ')\b/i', '', $instagramText);
所以实际上是:

$noTags = preg_replace('/\#(hashtag|hash|myword|another|hashing)\b/i', '', $instagramText)
// result:
" ! Lorem Ipsum dolor sit ament.    "
这样,它将剥离\b单词边界元字符以char开头的所有单词

希望能有帮助

编辑

使用preg_replace_callback检查匹配的hashtag是否以大写开头,如:

preg_replace_callback(
    '/\ ?#(' . $tags . ')\b ?/i',
    function($matches) {
        return is_first_uppercase($matches[1]) ? str_ireplace('#' . $matches[1], $matches[1], $matches[0]) : '';
    },
    $instagramText
);
例如,您只需要实现is_first_大写函数

与:

它应产生:

"Hashtag ! Lorem Ipsum Dolor sit ament."

嗨,克里斯,你的解决方案会有帮助,但我想我忘了一个主要信息。我想显示标签!乱数假文。。。。不仅如此!乱数假文。。。。这就是我选择键敏感的原因——Hashtag都是小写的,句子中使用的标记不是小写的Hashtag,只用于链接的一次标记是小写的Hashtag。所以我可以删除那些我不需要构建正确句子的句子。@ThomasB好吧,我忘了。您可以删除正则表达式末尾的不区分大小写的i开关,它还应该匹配字符大小写。但是你也想用Hashtag替换Hashtag吗?老实说,我不知道上面的代码应该做什么?我不熟悉php中的替换,所以我不明白为什么您有str_ireplace匹配[1]匹配[1]匹配[0]。顺便说一句:我试图插入它,在执行第一个元素时,它会使我的页面崩溃。
"Hashtag ! Lorem Ipsum Dolor sit ament."