Php 这个正则表达式在做什么?数组中的替换方法是什么
我想我知道下面的内容,但我不想做任何假设,我想确保 正则表达式是:Php 这个正则表达式在做什么?数组中的替换方法是什么,php,regex,preg-replace,Php,Regex,Preg Replace,我想我知道下面的内容,但我不想做任何假设,我想确保 正则表达式是: $value = preg_replace(array('/[^a-z0-9_ -]/', '/[ -]+/', '/^-|-$/'), array('', '-', ''), $str); 数组中的第一部分很简单,除了a-z、0-9、下划线、空格和连字符外,它什么都不替换。但是空格后的连字符不应该转义吗 第二部分我不太确定。。。。我想它是说用一个连字符替换一个或多个空格或一个或多个连字符?我说得对吗?但还是要避开连字符 第三
$value = preg_replace(array('/[^a-z0-9_ -]/', '/[ -]+/', '/^-|-$/'), array('', '-', ''), $str);
数组中的第一部分很简单,除了a-z、0-9、下划线、空格和连字符外,它什么都不替换。但是空格后的连字符不应该转义吗
第二部分我不太确定。。。。我想它是说用一个连字符替换一个或多个空格或一个或多个连字符?我说得对吗?但还是要避开连字符
第三部分有点混乱。。。。。正则表达式中的|字符不是或运算符吗?那么,用连字符或连字符替换为空?如果|
被转义,那么我将读取它,因为整个字符串需要匹配-|-
,并将其替换为零
最后。。。。。我的想法是正确的,它在它得到的位置处理替换?所以它会先处理数组中的第一个点,然后用剩下的字符串移动到第二个和第三个点;因此,例如,如果第一次替换替换了某个内容,那么第二次替换将对字符串的修订版本起作用?在第一次替换之后,字符串将只包含字母、数字、空格、下划线和连字符。第二次替换将把所有连续的空格和/或连字符转换为一个连字符,第三次替换将删除字符串开头或结尾的连字符
其他意见:
- 如果将连字符放在字符类的开头或结尾,则不需要对字符类中的连字符进行转义
- 第三个正则表达式
/^-|-$/
具有锚点^
和$
,分别表示字符串的开头和结尾,因此此正则表达式将匹配单个连字符,但仅当它位于字符串的开头或结尾时
删除除字母数字字符、空格、\uuu
或-
将连续空格或-
仅替换为一个-
删除前导和尾随-
正如@nickb所说,只要连字符不在由[]
分隔的一组字符中,连字符就不需要转义,如果它位于字符串的末尾或开头
第二部分匹配任何连续的空格或hypens字符串(即使它们是混合的)
第三部分匹配字符串开头的连字符(^-
)或字符串末尾的连字符(-$
)
这样做的目的是删除所有不是字母、数字、下划线、空格或连字符的字符。然后将所有连续的空格和连字符压缩为一个连字符。最后删除前导或尾随连字符。连字符不需要转义,因为它位于字符类的末尾([]
)-如果它位于开头或结尾,则不需要转义。看起来像是用于创建slug的正则表达式。@nickb啊,好的,我不知道。谢谢@是的,这是它的一部分令人惊叹的。谢谢我是否可以用/[\s-]+/
替换第二个,以同时捕获选项卡?@Brett是的,使用\s
可以,但是如果不想同时捕获换行符,则应使用/[\t-]+/
。