preg_replace 如果以 a-z 开头并以 a-z 结尾,则保留 space
preg_replace keep the space if start with a-z and end with a-z
我想用下划线替换 $string
中的任何 space
但如果 space 被 [a-z]
包围
$string = '@@ @@ English something else';
我试过了,但它会将“@@ @@”替换为“@_@”
$string = preg_replace('/[^a-z]\s[^a-z]/ui', '_' , $string);
我希望输出看起来像这样
@@_@@_English something else
我不确定那是什么语言,但我发现了这个:Use regular expression to match ANY Chinese character in utf-8 encoding
您的正则表达式需要包含(全部)汉字,可以表示为:
\p{Han}
这里是 PHP 关于 Unicode 字符的文档和支持的脚本列表:http://php.net/manual/en/regexp.reference.unicode.php
我认为您不需要为此任务包含 u
unicode 标志。
简单地用 (*SKIP)(*FAIL)
取消不需要的 space 的资格,然后替换所有符合条件的 space。
代码:(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)
<-- 这意味着匹配并丢弃字母-space-出现的字母
|
<-- 这意味着 "OR"
</code> <-- 这将匹配字符串中每个未丢弃的 space (只有这些会被替换 </p>
<hr>
<p>两个带环顾四周的备选方案也可以工作(而且速度更快):(<a href="https://regex101.com/r/kg9Ycj/2" rel="nofollow noreferrer">Demo</a>)</p>
<pre><code>/(?<![a-z]) | (?![a-z])/i
最快的是 \B
(单词边界元字符的否定版本):(Demo)
/\B | \B/
抱歉,我不知道如何在评论中使用代码,所以请添加回复
测试了第二个和第三个模式也有效
第二个我明白了,但是第三个对我来说有点难哈哈
我需要去检查一下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 名称 space,所以这解决了我的大问题
工作得很好 ;)
谢谢@mickmackusa
我想用下划线替换 $string
中的任何 space
但如果 space 被 [a-z]
包围$string = '@@ @@ English something else';
我试过了,但它会将“@@ @@”替换为“@_@”
$string = preg_replace('/[^a-z]\s[^a-z]/ui', '_' , $string);
我希望输出看起来像这样
@@_@@_English something else
我不确定那是什么语言,但我发现了这个:Use regular expression to match ANY Chinese character in utf-8 encoding
您的正则表达式需要包含(全部)汉字,可以表示为:
\p{Han}
这里是 PHP 关于 Unicode 字符的文档和支持的脚本列表:http://php.net/manual/en/regexp.reference.unicode.php
我认为您不需要为此任务包含 u
unicode 标志。
简单地用 (*SKIP)(*FAIL)
取消不需要的 space 的资格,然后替换所有符合条件的 space。
代码:(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)
<-- 这意味着匹配并丢弃字母-space-出现的字母
|
<-- 这意味着 "OR"
</code> <-- 这将匹配字符串中每个未丢弃的 space (只有这些会被替换 </p>
<hr>
<p>两个带环顾四周的备选方案也可以工作(而且速度更快):(<a href="https://regex101.com/r/kg9Ycj/2" rel="nofollow noreferrer">Demo</a>)</p>
<pre><code>/(?<![a-z]) | (?![a-z])/i
最快的是 \B
(单词边界元字符的否定版本):(Demo)
/\B | \B/
抱歉,我不知道如何在评论中使用代码,所以请添加回复
测试了第二个和第三个模式也有效
第二个我明白了,但是第三个对我来说有点难哈哈
我需要去检查一下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 名称 space,所以这解决了我的大问题
工作得很好 ;)
谢谢@mickmackusa