的preg_replace保持空间,如果开始用AZ与AZ

结束时,我想带下划线的preg_replace保持空间,如果开始用AZ与AZ

但如果空间是由[AZ]包围

$string = '@@ @@ English something else'; 

我试图取代$string任何空间这一点,但它取代 “@@ @@” 到 “@ _ @”

$string = preg_replace('/[^a-z]\s[^a-z]/ui', '_' , $string); 

我想输出看起来像这样

@@[email protected]@_English something else 

回答:

我认为您不需要包含此任务的u unicode标志。

只需取消(*SKIP)(*FAIL)的不良空间资格,然后替换所有符合条件的空格。

代码:(Demo)(Pattern Demo)

$string = '英文 中文 English something else'; 

echo preg_replace('/[a-z] [a-z](*SKIP)(*FAIL)| /i','_',$string);

输出:

英文_中文_English something else 

模式说明:

[a-z] [a-z](*SKIP)(*FAIL) < - 这意味着匹配并丢弃信空间信发生
| < - 这意味着“OR”
< - 这将匹配字符串(每个非废弃空间只有这些将被替换


两个备选方案与lookarounds也将工作(和更快): (Demo)

/(?<![a-z]) | (?![a-z])/i 


最快的所有的将是\B(单词边界元字符的否定版本):(Demo)

/\B | \B/ 

回答:

我不知道那是什么语言,但我发现这个:Use regular expression to match ANY Chinese character in utf-8 encoding

你的正则表达式需要包含(全部)中国字符,可以表示为:

\p{Han}

这里是关于Unicode字符和支持脚本列表的PHP文档:http://php.net/manual/en/regexp.reference.unicode.php

回答:

对不起,我不知道如何在评论使用的代码,所以只需添加回复

测试的第二和第三模式也工作

我明白了:第二个,但第三一个有点难受,LOL

我需要去检查https://www.regular-expressions.info/

$string = '英文名 中文名 Peter Wong,John Tam,Sam Hu'; 

$string = preg_replace('/(?<![a-z]) | (?![a-z])/i', ',', $string);

输出

英文名,中文名,Peter Wong,John Tam,Sam Hu 

因为CJK名称是每个字符之间没有空格,所以这解决了大问题,我

工作就像一个魅力;)

三江源@mickmackusa

以上是 的preg_replace保持空间,如果开始用AZ与AZ 的全部内容, 来源链接: utcz.com/qa/259293.html

回到顶部