我将这个组合放在一个字符串中:
"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."
有人可以帮助我在模式中做错了吗?
非常感谢, 乔恩
答案 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>\.)/
这将匹配所有点并在点组中命名