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

Php 在字符串的最后一个位置查找字符串,不区分大小写,如果找不到,则追加预定义字符串,php,regex,Php,Regex,我正在开发facebook开放图形api,用户可以在其时间线中发布视频。 现在我们播放视频的页面称为视频播放页面,我们动态生成元属性。过程如下 制作团队在数据库中添加视频,每个视频都有一个名为“title”的属性 此外,还有一个单独的db表,我们称之为meta_seo,其中为每个视频seo添加了相关信息。例如标题、描述等 现在,在为页面生成元信息时,我们首先检查meta_seo表上是否有一些信息,如果找到,我们将生成元标记,否则将从视频对象中检索它们,该对象也将包含一些信息,因此FB og:

我正在开发facebook开放图形api,用户可以在其时间线中发布视频。 现在我们播放视频的页面称为视频播放页面,我们动态生成元属性。过程如下

  • 制作团队在数据库中添加视频,每个视频都有一个名为“title”的属性
  • 此外,还有一个单独的db表,我们称之为meta_seo,其中为每个视频seo添加了相关信息。例如标题、描述等
现在,在为页面生成元信息时,我们首先检查meta_seo表上是否有一些信息,如果找到,我们将生成元标记,否则将从视频对象中检索它们,该对象也将包含一些信息,因此FB og:title我们有一些关于视频标题的信息

使用open graph api在FB timeline上发布的效果非常好

但是要发布的标题需要做一些修改

视频的标题可以是存储在数据库中的这种格式

  • 视频标题1
  • 视频标题2
  • 视频标题-mysite.com
  • 视频标题| MySite.com
因此,当我们将一段视频发布到FB timeline时,一些视频的标题末尾可能没有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或graph api/open graph上发布任何问题。

您可以使用regex实现更大的灵活性:

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


我建议在store haystacks中使用数组,然后在foreach中使用上面的答案。

不确定这是否可行,我的目标是检查mysite.com是否存在于字符串末尾。如果不存在,则在原始stringecho$haystack1的末尾添加“| mysite.com”。|“'mysite.com”;将返回array | MySite.com,其中我的字符串是一个简单字符串,但您的匹配有效。但“替换”并没有,所以我会等待更好的答案来接受。我的答案有误,请检查更新。好的,现在我明白了:)