在字符串不区分大小写的最后位置查找字符串,如果未找到则附加预定义字符串

时间:2014-01-16 08:07:43

标签: php regex

我在facebook open graph api上工作,用户可以在时间轴上发布视频。 现在我们播放视频的页面我们称之为视频播放页面,我们动态生成元属性。过程如

  • 制作团队在数据库中添加视频,每个视频都有一个名为“title”的属性。
  • 此外还有一个单独的db表,我们称之为meta_seo,其中添加了每个视频SEO相关信息。例如标题,描述等。

现在,在为页面生成元信息时,我们首先检查meta_seo表上是否有某些信息,如果找到,我们生成元标记,否则从视频对象中检索它们,这也将包含一些信息,因此FB og:title我们有一些关于视频标题的信息。

使用开放图形API在FB时间轴上发布效果非常好。

但是发布的标题需要进行一些更改。

视频标题可采用此格式存储在数据库中。

  • video title1
  • video title2
  • 视频标题 - mysite.com
  • 视频标题| MySite.com

因此,当我们将视频发布到FB时间线时,某些视频可能在标题的最后没有mysite.com。但我们需要始终追加mysite.com。

基于以上可能性,我编写了一个脚本

$haystack1 = "Title1- Online class - mysite.com";
$haystack2 = "Title2 - Online Class";

$needle = 'mysite.com';

if(strripos($haystack1,$needle) === false){
    echo $haystack1.' | '.'MySite.com';
}else{
    echo $haystack1 ;
}


if(strripos($haystack2,$needle) === false){
    echo $haystack2.' | '.'MySite.com';
}else{
    echo $haystack2 ;
} 

以上代码效果很好。但我的问题是,有没有更好的方法来实现这一点,或者我可以按照我上面指出的方式来实现。

我没有将此标记为Facebook,因为它与Facebook没有关系,也没有任何问题在FB或图形api /开放图上发布。

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来提高灵活性:

if (preg_match('/\s*(-|\|)?\s*'.str_replace('.', '\.', $needle).'\s*$/i', $haystack1)) {
    // do something if exists
    echo $haystack1;
} else {
    echo $haystack1.' | '.'MySite.com';
}

因此脚本将输出:

video title1             => video title1 | MySite.com
video title2             => video title2 | MySite.com
video title - mysite.com => video title - mysite.com
video title | MySite.com => video title | MySite.com

你需要吗?或者您想通过 |替换 - mysite.com MySite.com 也是?

我建议使用数组存储干草堆,然后在foreach中使用我的答案。