代码是这样的:
$k = preg_replace('/[^a-zA-Z 0-9ßöäüÖÄÜ\"\._-\p{L}]/u', '', $k);
(是的,我知道它是多余的)
错误消息:
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 33
现在看看这一行,它运作正常:
$k= preg_replace('/[^a-zA-Z 0-9ßöäüÖÄÜ\"\.-_-\p{L}]/u', '', $k);
所以添加或删除一个" - "在正则表达式中发生了巨大的变化 删除\ p {L}
时,两个正则表达式行都有效这是PHP(5.6.30)中的错误还是我错过了必要的东西? (现在是早上7点,我需要睡觉:)。
答案 0 :(得分:2)
在字符类中,字符范围定义为字符-
(连字符),但_-\p{L}
未定义范围。
要在字符类中计算字面连字符,您在PHP中有几种可能性:
^
这最后一个并不为人所知,是造成奇怪结果的原因。在第二种模式中,您处于这种情况:
.-_ - \p{L}
# ^^^ ^---- the hyphen is after
# '''--------- a range
# and in this case it is seen as a literal character
所以,回答你的问题,这不是一个错误。