首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果以a开头,以a结尾,preg_replace保留空格。

如果以a开头,以a结尾,preg_replace保留空格。
EN

Stack Overflow用户
提问于 2017-12-03 02:51:27
回答 2查看 486关注 0票数 2

我想用下划线替换$string中的任何空格

但如果空间被a-z包围的话就不会了。

代码语言:javascript
复制
$string = '@@ @@ English something else';

我试过了,但它将“@”替换为"@_@“

代码语言:javascript
复制
$string = preg_replace('/[^a-z]\s[^a-z]/ui', '_' , $string);

我希望输出结果像这样

代码语言:javascript
复制
@@_@@_English something else

对不起,我不知道如何在注释中使用代码,所以只需添加一个回复

测试第二和第三模式也有效。

我明白第二个,但第三个对我来说有点困难。

我要去看看https://www.regular-expressions.info/

代码语言:javascript
复制
$string = '英文名 中文名 Peter Wong,John Tam,Sam Hu';
$string = preg_replace('/(?<![a-z]) | (?![a-z])/i', ',', $string);

输出是

代码语言:javascript
复制
英文名,中文名,Peter Wong,John Tam,Sam Hu

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

工作得很有魅力;)

谢谢你@mickmackusa

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-03 03:28:38

我不认为这个任务需要包含u unicode标志。

只需用(*SKIP)(*FAIL)取消不合适的空格,然后替换所有限定空格。

代码:(演示) (模式演示)

代码语言:javascript
复制
$string = '英文 中文 English something else';
echo preg_replace('/[a-z] [a-z](*SKIP)(*FAIL)| /i','_',$string);

输出:

代码语言:javascript
复制
英文_中文_English something else

模式解释:

[a-z] [a-z](*SKIP)(*FAIL) <--这意味着匹配并丢弃字母空格字母出现的情况。

| <--意思是“或”

<--这将匹配字符串中所有未丢弃的空间(只有这些空间将被替换)。

有两种可供选择的看台也会起作用(而且速度更快):(演示)

代码语言:javascript
复制
/(?<![a-z]) | (?![a-z])/i

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

代码语言:javascript
复制
/\B | \B/
票数 2
EN

Stack Overflow用户

发布于 2017-12-03 02:58:39

我不知道那是什么语言,但我发现了这个:使用正则表达式匹配utf-8编码中的任何汉字。

您的正则表达式需要包含(所有)汉字,这些汉字可以表示为:

\p{Han}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47614801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档