$data
包含制表符,前导空格和多个空格。 我希望用空格替换所有的标签。 一个单一领域的多个空间,并删除前导空格。
事实上财产以后,将关闭此输入数据:
[ asdf asdf asdf asdf ]
为输出数据:
[asdf asdf asdf asdf]
我该怎么做呢?
$data
包含制表符,前导空格和多个空格。 我希望用空格替换所有的标签。 一个单一领域的多个空间,并删除前导空格。
事实上财产以后,将关闭此输入数据:
[ asdf asdf asdf asdf ]
为输出数据:
[asdf asdf asdf asdf]
我该怎么做呢?
$data = trim(preg_replace('/\s+/g', '', $data));
内饰方面,用一个空格代替制表符和多余的空格:
$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data));
假设没有方括号,字符串的一部分,你只是使用它们用于说明目的,则:
$new_string = trim(preg_replace('!\s+!', ' ', $old_string));
你也许可以做到这一点有一个正则表达式,但它会是一个相当复杂的正则表达式。 以上是要简单得多。
注:我也假设你不想与“AB CD”,以取代“AB \ t \ TCD”(\ t是一个标签)。
$data = trim($data);
这摆脱你的领导(和尾)空间。
$pattern = '/\s+/';
$data = preg_replace($pattern, ' ', $data);
那会使一个或多个空格的任意集合逼到一个空间。
$data = str_replace("\t", " ", $data);
这摆脱你的标签。
$new_data = preg_replace("/[\t\s]+/", " ", trim($data));
这个答案需要的问题完全从字面上:它是只关注空格和制表符。 诚然,OP 可能还希望包括其他种类的空白在什么被修剪/压缩,但是让我们假设他想保留嵌入CR和/或LF。
首先,让我们设置一些常量。 这将允许两个便于理解和可维护性,应该修改成为必需。 我把一些额外的空间,让你可以更容易地比较异同。
define( 'S', '[ \t]+' ); # Stuff you want to compress; in this case ONLY spaces/tabs
define( 'L', '/\A'.S.'/' ); # stuff on the Left edge will be trimmed
define( 'M', '/'.S.'/' ); # stuff in the Middle will be compressed
define( 'R', '/'.S.'\Z/' ); # stuff on the Right edge will be trimmed
define( 'T', ' ' ); # what we want the stuff compressed To
我们使用\A
和\Z
转义字符到指定主题的开头和结尾,而不是典型的^
和$
它们是面向行的元字符 。 因为他们需要在这种情况下尽可能多的“防御性”节目,应该值这个与其说是S
使他们需要改变的未来。
现在的秘密武器:我们要采取一些特殊的语义的优势了preg_replace ,即(强调)
如果在替换阵列中的更少的元件比图案阵列中,任何额外的模式将通过一个空字符串来代替。
function trim_press( $data ){
return preg_replace( [ M, L, R ], [ T ], $data );
}
因此,而不是一个模式字符串和替换字符串,我们使用了一个图案阵列和替换阵列,这导致额外的图案L
和R
被修剪。
如果您需要删除
太。
$data = trim(preg_replace('/\s+|nbsp;/g', '', $data));
只要使用这个表达式
$str = trim(preg_replace('/\s\s+/', ' ', $str));
它会用一个空格替换所有的制表符和空格,
这里的标志+
在正则表达式是指一个或更多次,模式意味着,只要有两个或多个空格,用一个空格替换它