如何在PHP中从这个组合中删除点

时间:2012-03-30 06:51:42

标签: php regex preg-replace

我将这个组合放在一个字符串中:

"I am tagging @username1.blah. and @username2.test. and @username3."

我试过了:

preg_replace('/\@^|(\.+)/', '', 'I am tagging @username1.blah. and @username2.test. and @username3. in my status.');

但结果是:

"I am tagging @username1blah and @username2test and @username3 in my status"

以上结果不是我想要的。

这就是我想要实现的目标:

"I am tagging @username.blah and @username2.test and @username3 in my status."

有人可以帮助我在模式中做错了吗?

非常感谢, 乔恩

6 个答案:

答案 0 :(得分:3)

我不太喜欢正则表达式,但是如果你确定想要删除的点总是后跟一个空格,你可以这样做:

php > $a = "I am tagging @username1.blah. and @username2.test. and @username3.";
php > echo str_replace(". ", " ", $a." ");
I am tagging @username1.blah and @username2.test and @username3

答案 1 :(得分:2)

试试这个:

preg_replace('/\.(\s+|$)/', '\1', $r);

答案 2 :(得分:1)

这会替换以@

开头的“字词”末尾的点
$input = "I am tagging @username1.blah. and @username2.test. and @username3. in my status.";
echo preg_replace('/(@\S+)\.(?=\s|$)/', '$1', $input);
当点后跟空格或字符串结尾((@\S+)\.(?=\s|$)\S将匹配非空格((?=\s|$))系列末尾的点。 >

答案 3 :(得分:0)

preg_replace('/\.( |$)/', '\1', $string);

答案 4 :(得分:0)

怎么样:

preg_replace("/(@\S+)\.(?:\s|$)/", "$1", $string);

答案 5 :(得分:0)

/\@\w+(\.\w+)?(?<dot>\.)/

这将匹配所有点并在点组中命名