我有一个字符串This is a string
,我想在一个单词之前添加一个字符#
,但我不知道如何在php中这样做。
我试过这段代码:
$string = 'This is a string';
substr_replace($string, '#', stripos($string, 'a'), 0);
它运行正常,但问题是如果我想在'is'之前添加'#',那么它将提供以下输出。
Th#is is a string a string
我正在寻找一个可以找到特定单词的函数,并在该单词之前添加一个字符。
答案 0 :(得分:1)
$string = preg_replace('/\bis\b/i', '#$0', $string);
\b
表示字边界,/i
使整个事件不区分大小写(可选,但可能是个好主意)。详细了解正则表达式here,以便根据需要进行更改。
答案 1 :(得分:0)
是的,你试过用strrpos()代替stripos()。
$newstr=substr_replace($temp, '#', strrpos($temp, 'is'),0);
参考http://www.w3schools.com/php/func_string_strpos.asp了解差异并学习其他strpos()函数。
答案 2 :(得分:0)
使用preg_replace
执行此任务。同时为此PHP函数的 limit param 指定1
,以将可能的最大替换限制为1.
以下是如何实现此功能的示例:
$string = 'This is a string and it is working fine';
$result = preg_replace('/\bis\b/i', '#$0', $string, 1);
在这种情况下,$ result将包含以下内容:
This #is a string and it is working fine
使用的正则表达式('/\bis\b/i'
)由以下语法组成:
//
=>封闭的delimiters(模式之前和之后)
\b
=>指定word boundary condition
/i
=> (可选)这是一个pattern modifier,它将模式设置为不区分大小写(无壳)
/u
=> (可选 - 未包含在示例模式中)这是另一个pattern modifier,它将字符串视为UTF-8。如果你有包含UTF-8编码字符的字符串,请使用。
关于正则表达式分隔符的一点注意事项: 您也可以使用其他字符作为分隔符,而不是斜杠(/)。哈希标志(#)和波浪号(〜)。如果需要在模式内匹配分隔符,则必须使用反斜杠对其进行转义。如果它经常出现在模式中,那么选择另一个分隔符是个好主意,以提高可读性。 (来源:http://php.net/regexp.reference.delimiters)