未知修饰符 '/' PHP 中的错误
preg_replace('/http:///ftp:///', 'https://', $value);
$value
里面的 http://
和 ftp://
应该替换成 https://
这个代码给出错误:
preg_replace() [function.preg-replace]: Unknown modifier '/'
此任务的真正正则表达式是什么?
preg_replace('/http:///ftp:///', 'https://', $value);
http://
and ftp://
inside $value
should be replaced with https://
This code gives error:
preg_replace() [function.preg-replace]: Unknown modifier '/'
What is a true regex for this task?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用另一个分隔符,例如“#”。
并且不要混淆 / 和 |
Use another delimiter character, like '#', for instance.
And do not confuse / and |
长话短说:正则表达式需要用分隔符括起来,并且这些分隔符在整个正则表达式中必须是唯一的。如果要使用 /,则需要对正则表达式中剩余的 /-s 进行转义。然而,这使得语法看起来有点难看。幸运的是,您可以使用任何字符作为分隔符。 !效果很好,其他角色也一样。
正则表达式的其余部分仅列出两个选项,其中任何一个都将替换为第二个参数。
Long story: Regexp needs to be enclosed in delimiters, and those have to be unique inside the whole regexp. If you want to use /, then the remaining /-s inside the regexp need to be escaped. This however makes the syntax look a bit ugly. Luckily you can use any character as delimiter. ! works fine, as will other characters.
The rest of the regexp just lists two options, either of which will be replaced with the second parameter.
使用这个代替:
或者
Use this instead:
Or
尝试使用不同的分隔符,例如
#
:或(不太推荐)转义正则表达式中出现的每个分隔符:
此外,您正在搜索模式
http:///ftp://
这确实没有多大意义,可能你的意思是http://|ftp://
。您可以使正则表达式更短,如下所示:
理解错误:
未知修饰符 '/'
在正则表达式中
'/http:///ftp:///'
,第一个/
被视为起始分隔符,:
之后的/
被视为结束分隔符。现在我们知道我们可以为正则表达式提供修饰符来改变其默认行为。一些这样的修饰符是:i
:匹配大小写不敏感的
m
:多行搜索但是 PHP 在结束分隔符后看到的是另一个
/
并尝试将其解释为修饰符,但失败,导致错误。preg_replace
返回更改后的字符串。Try using a different delimiter, say
#
:or (less recommended) escape every occurrence of the delimiter in the regex:
Also you are searching for the pattern
http:///ftp://
which really does not make much sense, may be you meanthttp://|ftp://
.You can make your regex shorter as:
Understanding the error:
Unknown modifier '/'
In your regex
'/http:///ftp:///'
, the first/
is considered as starting delimiter and the/
after the:
is considered as the ending delimiter. Now we know we can provide modifier to the regex to alter its default behavior. Some such modifiers are:i
: to make the matching caseinsensitive
m
: multi-line searchingBut what PHP sees after the closing delimiter is another
/
and tries to interpret it as a modifier but fails, resulting in the error.preg_replace
returns the altered string.