gpt4 book ai didi

php - 正则表达式:一起删除非字母数字字符、多个空格和 trim()

转载 作者:可可西里 更新时间:2023-10-31 22:57:24 24 4
gpt4 key购买 nike

我有一个 $text 来去除所有非字母数字字符,用单个空格替换多个空格和换行符,并消除开始和结束空格。

到目前为止,这是我的解决方案。

$text = '
some- text!!

for testing?
'; // $text to format

//strip off all non-alphanumeric chars
$text = preg_replace("/[^a-zA-Z0-9\s]/", "", $text);

//Replace multiple white spaces by single space
$text = preg_replace('/\s+/', ' ', $text);

//eliminate beginning and ending space
$finalText = trim($text);
/* result: $finalText ="some text for testing";
without non-alphanumeric chars, newline, extra spaces and trim()med */

是否可以在一个正则表达式中组合/实现所有这些?因为我会在一行中得到想要的结果,如下所示

$finalText = preg_replace(some_reg_expression, $replaceby, $text);

谢谢

编辑:用测试字符串澄清

最佳答案

当然可以。这很容易。

re 看起来像:

((?<= )\s*)|[^a-zA-Z0-9\s]|(\s*$)|(^\s*)

我手头没有 PHP,我用过 Perl(只是为了测试 re 并证明它可以工作)(你可以玩我的代码 here ):

$ cat test.txt 
a b c d
a b c e f g fff f

$ cat 1.pl
while(<>) {
s/((?<= )\s*)|[^a-zA-Z0-9\s]|(\s*$)|(^\s*)//g;
print $_,"\n";
}

$ cat test.txt | perl 1.pl
a b c d
a b c e f g fff f

对于 PHP,它将是相同的。

RE 是做什么的?

((?<= )\s*)       # all spaces that have at least one space before them
|
[^a-zA-Z0-9\s] # all non-alphanumeric characters
|
(\s*$) # all spaces at the end of string
|
(^\s*) # all spaces at the beginning of string

这里唯一棘手的部分是 ((?<= )\s*) , lookbehind 断言。当且仅当空格的子串之前有一个空格时,您才删除空格。

如果您想了解前瞻/后视断言的工作原理,请查看http://www.regular-expressions.info/lookaround.html。 .

讨论更新:

$text ='some ? ! ? text'; 时会发生什么?然后生成的字符串在“some”和“text”之间包含多个空格。

解决这个问题并不是那么容易,因为需要具有可变长度的正后向断言,而这在目前是不可能的。人们不能简单地检查空格,因为它可能发生,所以它不是空格而是非字母数字字符,并且无论如何都会被删除(例如:在 " !" 中, "!" 符号将被删除,但 RE 对此一无所知;一个需要像 (?<=[^a-zA-Z0-9\s]* )\s* 之类的东西,但不幸的是,这将不起作用,因为 PCRE 不支持 lookbehind 可变长度断言。

关于php - 正则表达式:一起删除非字母数字字符、多个空格和 trim(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com