2017-12-03 89 views

回答

2

我认为您不需要包含此任务的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/ 
+0

必须遵循|和空间?永远不知道这(*跳过)(*失败)非常有用 – kenken9999

+0

我已经添加了一些关于模式的更多解释。 (和,是的,我同意'(*跳过)(*失败)'是非常有用的。) – mickmackusa

+0

谢谢你这么多,了解了这个 – kenken9999

0

我不知道那是什么语言,但我发现这个: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

+0

对不起,这是中文,我编辑了这个问题,实际情况相同 – kenken9999

+0

这篇文章提供了三条小建议;其中两个只是链接。这篇文章可以更好地定位为这个问题下的评论,因为它不会试图回答这个问题。 – mickmackusa

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18144388) –

0

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

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

我明白了:第二个,但第三一个有点难受,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

相关问题