php 正则有效字符,PHP中更有效的字符串清理正则表达式

好吧,我希望有人可以帮我一点正则表达式.

我正在尝试清理字符串.

基本上,我是:

>将所有字符替换为A-Za-z0-9除外.

>用单个替换实例替换替换的连续重复副本.

>从字符串的开头和结尾修剪替换.

输入示例:

(&&(%()$()#&%& %%(%$-_狗跳过日志*(&)$%&)#)@#%& )& ^)@#)

要求的输出:

狗跳过了原木

我目前正在使用此非常分散的代码,并且只知道有一种更优雅的方法可以完成此任务.

function clean($string, $replace){

$ok = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

$ok .= $replace;

$pattern = "/[^".preg_quote($ok, "/")."]/";

return trim(preg_replace('/'.preg_quote($replace.$replace).'+/', $replace, preg_replace($pattern, $replace, $string)),$replace);

}

Regex-Fu Master能否请我提供一个更简单/更有效的解决方案?

BotondBalázs和hakre提出并解释了一个更好的解决方案:

function clean($string, $replace, $skip=""){

// Escape $skip

$escaped = preg_quote($replace.$skip, "/");

// Regex pattern

// Replace all consecutive occurrences of "Not OK"

// characters with the replacement

$pattern = '/[^A-Za-z0-9'.$escaped.']+/';

// Execute the regex

$result = preg_replace($pattern, $replace, $string);

// Trim and return the result

return trim($result, $replace);

}

解决方法:

我不是“正则表达式忍者”,但我将按照以下方式进行操作.

function clean($string, $replace){

/// Remove all "not OK" characters from the beginning and the end:

$result = preg_replace('/^[^A-Za-z0-9]+/', '', $string);

$result = preg_replace('/[^A-Za-z0-9]+$/', '', $result);

// Replace all consecutive occurrences of "not OK"

// characters with the replacement:

$result = preg_replace('/[^A-Za-z0-9]+/', $replace, $result);

return $result;

}

我想这可以进一步简化,但是在处理正则表达式时,清晰度和可读性通常比聪明或编写超最佳代码更重要.

让我们看看它是如何工作的:

> / ^ [^ A-Za-z0-9] /:

> ^匹配字符串的开头.

> [^ A-Za-z0-9]与所有非字母数字字符匹配

>表示“匹配一项或多项先前的内容”

> / [^ A-Za-z0-9] $/:

>与上述相同,但$匹配字符串的结尾

> / [^ A-Za-z0-9] /:

>与上述相同,但它也匹配中弦

编辑:OP是正确的,可以用对trim()的调用来替换前两个:

function clean($string, $replace){

// Replace all consecutive occurrences of "not OK"

// characters with the replacement:

$result = preg_replace('/[^A-Za-z0-9]+/', $replace, $result);

return trim($result, $replace);

}

标签:code-cleanup,clean-urls,string,php,regex

来源: https://codeday.me/bug/20191031/1977197.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 PHP正则表达式函数 preg_match() 可以匹配字符串。以下是一个示例: ```php $str = "Hello, World!"; $pattern = "/\bWorld\b/"; if (preg_match($pattern, $str)) { echo "Match found!"; } else { echo "Match not found."; } ``` 这段代码将输出 "Match found!",因为 $str 包含单词 "World",并且 $pattern 使用了单词边界 \b 进行匹配。请注意,正则表达式模式需要用斜杠 / 包围。 ### 回答2: PHP正则表达式是一种强大的字符串匹配工具,能够根据特定模式来匹配和处理字符串。在PHP,可以使用preg_match函数来进行正则表达式的匹配。 preg_match函数接受三个参数,分别是正则表达式模式、目标字符串和可选的匹配结果输出变量。函数会在目标字符串查找是否存在与正则表达式模式匹配的内容,如果匹配成功,则返回true,否则返回false。 正则表达式模式由特定的字符和符号组成,用于描述需要匹配的字符串规则。例如,使用\d可以匹配一个数字字符,\w可以匹配一个字母数字字符。 对于复杂的正则表达式模式,我们可以使用特定的字符类、量词和分组等特性来实现准确的匹配。例如,使用[a-z]可以匹配一个小写字母,\d{2,4}可以匹配2到4个数字。 在进行匹配时,可以使用捕获组来提取感兴趣的部分字符串。捕获组是通过在正则表达式模式使用小括号来定义的,使用圆括号包裹的部分将被定义为一个捕获组。 除了preg_match函数,PHP还提供了许多其他与正则表达式相关的函数,如preg_replace、preg_split等,用于替换、拆分和其他正则表达式操作。 总结来说,PHP正则表达式是一种强大的字符串匹配工具,可以根据特定的模式来匹配和处理字符串。在应用,我们可以利用它来实现各种字符串操作,如验证、替换、拆分等。 ### 回答3: 在PHP正则表达式是一种强大的工具,用于匹配和处理字符串。它可以用于各种字符串操作,例如验证输入,提取数据以及替换特定的字符串。 使用正则表达式的基本步骤是: 1. 定义正则表达式模式,它由特定的字符和元字符组成,用于匹配目标字符串。 2. 使用preg_match函数进行匹配,该函数用于判断目标字符串是否与正则表达式模式匹配。如果匹配成功,则返回1;否则返回0。 3. 可以使用 preg_match_all函数来匹配目标字符串的所有模式出现。 4. 使用preg_replace函数实现字符串的替换操作,将匹配到的部分替换为指定的字符串。 5. 使用preg_split函数按照正则表达式模式分割字符串。 例如,如果我们想匹配一个字符串是否包含数字,可以使用正则表达式模式"/\d/",其\d表示数字。代码如下: ```php $str = "Hello,123 world"; if(preg_match("/\d/", $str)){ echo "字符串包含了数字"; } else { echo "字符串不包含数字"; } ``` 输出结果为:字符串包含了数字。 以上是关于PHP正则表达式匹配字符串的基本操作,根据具体的需求和匹配规则,可以使用复杂的模式和函数来实现精确的匹配和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值