PHP str_replace无法提供我想要的输出

时间:2015-06-08 07:40:12

标签: php string

我想替换特定位置的字符串。为此,我使用了str_replace() PHP函数,但在那之后,我无法获得输出。在这里,我向您展示我想要的东西。

$str = "hello 8-7-2015 world -12";
// here I want replace - with ' desh ' but in date only. That I have detected using check before character if space than it should be 'minus' otherwise it should be 'desh'.

$key = strpos($str, "-");
if($key !== false){
     $a = substr($str, $key-1 , 1);
     if($a != " "){
           $str = str_replace("-","desh",$str);
     }else{
           $str = str_replace("-","minus",$str);
     }
}

我的输出如下:hello 8 desh 7 desh 2015 world desh 12desh我希望minus 12到处都是@Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE IF NOT EXISTS users (" + "_id INTEGER PRIMARY KEY, " + "name TEXT NOT NULL, " + "password TEXT NOT NULL);"; db.execSQL(sql); sql = "INSERT INTO users VALUES ('testuser', 'textpassword')"; db.execSQL(sql); } 。其他值是可以的,不应该更改。 意味着特定的位置变化。

4 个答案:

答案 0 :(得分:2)

因为str_replace对整个字符串生效而与你的$ key变量没有任何关系,所以你的情况没有意义。

       $str = str_replace(" -","minus",$str);
       $str = str_replace("-","desh",$str);

事实是,你甚至不需要那种条件。当搜索项前面有空格而第二个str_replce没有时,只需使用第一个str_replace。 (命令它很重要)。

答案 1 :(得分:2)

您的代码(带有if)不会循环查找所有匹配项的字符串,因此当所有匹配项都发生更改时,应该会向您发出警告标记。

它的作用是找到第一个出现,其前面没有空格,然后执行:

str_replace("-","desh",$str);

替换字符串中的所有次出现。为了做你想做的事,你只需要:

str_replace(" -"," minus",$str);
str_replace("-","desh",$str);

这将首先处理以空格开头的所有-字符,并将其转换为" minus"

然后,第二行将处理所有剩余的-个字符,并将其替换为"desh"

顺便说一下,如果你这样做是为了能够"说"单词(在文本到语音(TTS)程序的意义上),你可能希望在你添加的单词的两边都有空格。您可以通过非常小的修改来实现这一目标:

str_replace(" -"," minus ",$str);
str_replace("-"," desh ",$str);

这可能使您的TTS代码更容易处理单词。

答案 2 :(得分:0)

您可以使用正则表达式:

$str = preg_replace(
    ['/(\d{1,2})-(\d{1,2})-(\d{2,4})/','/-(\d+)/'],
    ['$1 desh $2 desh $3',             'minus $1'],
    $str);

答案 3 :(得分:0)

检查一下, 首先,您必须从字符串中获取日期,然后在与其他字符串连接后更改日期格式

$str = explode(' ',$str);
$str1 = str_replace("-","desh",$str[1]);
$str2 = str_replace("-","minus",$str[2]);
$str = $str[0].$str1.$str2;