如果以a-z开头并以a-z结尾,则preg_replace保留空格

时间:2017-12-03 02:51:27

标签: php preg-replace

我想用{下划线

替换$string中的任何空格

但如果空间被[a-z]

包围,则不是
$string = '@@ @@ English something else';

我试过了,但它取代了#34; @@ @@"到" @ _ @"

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

我希望输出看起来像这样

@@_@@_English something else

3 个答案:

答案 0 :(得分: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)< - 这意味着匹配并丢弃字母空格字母出现
|< - 这意味着"或"
< - 这将匹配字符串中的每个非丢弃空格(只有这些将被替换

两种具有外观的替代方案也可以(并且更快):( Demo

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

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

/\B | \B/

答案 1 :(得分:0)

我不确定是什么语言,但我发现了这个: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

答案 2 :(得分:0)

抱歉,我不知道如何在评论中使用代码,所以只需添加回复

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

我理解第二个,但第三个对我来说有点困难LOL

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<div class="testimonial_block2">

					<!-- progress bar -->

					<div class="iva_progress_bar">
						<div class="bar_title">5 REVIEWS</div>
						<div class="bar_wrap">
							<span class="bar_color" data-width="0">
								<div class="percentage"></div>
							</span>
						</div>
						<div class="users"></div>
					</div>

					<div class="iva_progress_bar">
						<div class="bar_title">4 REVIEWS</div>
						<div class="bar_wrap">
							<span class="bar_color" data-width="100">
								<div class="percentage"></div>
							</span>
						</div>
						<div class="users"></div>
					</div>

					<div class="iva_progress_bar">
						<div class="bar_title">3 REVIEWS</div>
						<div class="bar_wrap">
							<span  class="bar_color" data-width="3">
								<div class="percentage"></div>
							</span>
						</div>
						<div class="users"></div>
					</div>

					<div class="iva_progress_bar">
						<div class="bar_title">2 REVIEWS</div>
						<div class="bar_wrap">
							<span class="bar_color" data-width="6">
								<div class="percentage"></div>
							</span>
						</div>
						<div class="users"></div>
					</div>

					<div class="iva_progress_bar">
						<div class="bar_title">1 REVIEWS</div>
						<div class="bar_wrap">
							<span class="bar_color" data-width="11">
								<div class="percentage"></div>
							</span>
						</div>
						<div class="users"></div>
					</div>
        </div>

输出

$string = '英文名 中文名 Peter Wong,John Tam,Sam Hu';
$string = preg_replace('/(?<![a-z]) | (?![a-z])/i', ',', $string);

因为CJK Name在每个char之间没有空格,所以这解决了我的大问题

像魅力一样工作;)

Thankyou @mickmackusa