【问题标题】:Use regex to remove everything but [a-zA-Z0-9-] from string使用正则表达式从字符串中删除除 [a-zA-Z0-9-] 之外的所有内容
【发布时间】:2012-02-27 02:42:03
【问题描述】:
我在这些论坛上搜索过,似乎每个人都对我的问题略有不同。
我有以下字符串To-Wage-a-64-Bit-Coup!,我想使用preg_replace() 删除任何不是字母、数字或连字符[a-zA-Z0-9] 的内容。最终结果是感叹号会被删除。
我不知道需要删除的所有字符,但我知道需要保留的字符。这是为了生成一个对 seo 友好的 url。不确定我需要的是负前瞻还是正前瞻,或者可能使用 preg_match() 之类的其他东西来完成我的目标。
【问题讨论】:
标签:
php
regex
url-rewriting
seo
preg-replace
【解决方案1】:
preg_replace("([^a-zA-Z0-9-])","",$subject);
在[...] 的开头放置一个^ 以取消其效果。
【解决方案2】:
$string = preg_replace("'[^A-Za-z0-9-]'", '', $string);
A-Za-z0-9- 匹配字母、数字和连字符。开头的 ^ 否定了该字符类,因此它匹配除这些字符之外的所有字符。
如果这是为了创建 URL 友好的字符串,您可能还需要考虑首先将空格转换为连字符,删除可能由此产生的多次连字符,并将字符串转换为小写。