Php 如何删除单词开头的所有特殊字符?

Php 如何删除单词开头的所有特殊字符?,php,regex,persian,Php,Regex,Persian,我有这样一个波斯语文本: $str = 'این یک متن تست است. اینجا ایران است'; 这也是我想要删除它的地方(如果它在单词的第一个部分,基本上第一个的定义是在空格之后): 所以我想要这个输出: $newstr: 'ن یک متن تست است. نجا ران است'; 我尝试的只是第一个字: echo $newstr = preg_replace('/^ای\u/', '', $str); // output: ن یک متن تست است

我有这样一个波斯语文本:

$str = 'این یک متن تست است. اینجا ایران است';
这也是我想要删除它的地方(如果它在单词的第一个部分,基本上第一个的定义是在空格之后):

所以我想要这个输出:

$newstr: 'ن یک متن تست است. نجا ران است';
我尝试的只是第一个字:

echo $newstr = preg_replace('/^ای\u/', '', $str);

  // output: ن یک متن تست است. اینجا ایران است
不管怎样,我如何实现它的第一个字

(需要注意的是,从语义角度看,
是一样的,我知道,有明显的区别)


编辑:以下是我的英文版问题:

$str = 'it is a test, i like that';
现在我想要这个:(删除每个单词开头的所有
I


我该怎么做呢?

这个问题对我来说有点难理解,但你的正则表达式中有几个部分可能是阻碍你的原因:

  • ^
    -与字符串开头的匹配
  • \u
    -是PCRE不支持的语法,您可能想在分隔符
    /u
    后加上u以启用utf-8处理
做出这些改变会带来:

echo preg_replace('/ای/u', '', $str);
哪些产出:

ن یک متن تست است. نجا ران است
要使其仅在单词开头匹配,请使用
\b

echo preg_replace('/\bای/u', '', $str);

看来你需要这样的东西
\x{627}\x{6CC}\x{640}?
的答案可能会对你有所帮助。@BobKaufman似乎很有用,谢谢。Sajad,这里的大多数人都看不懂波斯语,至少对我来说,你的问题是否真的与波斯语字母有关还不清楚。但我猜。请尝试搜索有关字符串替换的更多常见问题,并删除此问题或使其更一般化(它可能会作为副本关闭)。我试图理解特殊字符的含义,但无法分辨。当然,这是一个右->左排序。@sln是的,它是从右到左排序。您的代码很好,但有一个小问题,请用这个词试试:
。它将替换为
لک
;因为<代码> > <代码>在词的中间,我需要让它像原封不动地去……什么?这对我来说真的不清楚,你知道。。。我使用PHP。Paul Crovella的答案很好,但我不知道为什么
\b
对我不起作用。你知道,这可能是从右到左的顺序。问题是,有单词边界,试着把
\b
放在另一边。嗯,是的,看起来你是对的,有什么解决办法吗?
echo preg_replace('/\bای/u', '', $str);