【问题标题】:php preg_replace string that ends and finishes with slash characterphp preg_replace 以斜杠字符结尾的字符串
【发布时间】:2016-05-10 11:41:13
【问题描述】:

目录名($_SERVER['PHP_SELF'])

在我的情况下返回:/blabla/test

我正在尝试使用 preg_replace 来删除 /blabla/。

我这样做:

$dossier = preg_replace('/^\/[0-9a_z]\/$/','',dirname($_SERVER['PHP_SELF']));

我希望做的是:“找到任何以 / 开头和以 / 结尾的东西,中间有 0-9a-z。但这不是如何做到这一点的。

谢谢

【问题讨论】:

  • 我注意到在重新输入时您还有一个 a_z 而不是 a-z。
  • 这里有一个快速提示:在您知道将要处理斜线的任何事情中,使用不同的分隔符通常更容易。因此,您可以使用波浪号,而不是在表达式的开头和结尾使用正斜杠。 /^\/[0-9a-z]+\// 之类的代码可以更改为 ~^/[0-9a-z]+/~ 之类的代码。

标签: php escaping preg-replace backslash slash


【解决方案1】:

把那个美元符号放在那里就是抛弃正则表达式。我相信这就是你要找的。如果这不起作用,请告诉我。

$dossier = preg_replace('/^\/[0-9a-z]*\//', '', dirname($_SERVER('PHP_SELF']));

【讨论】:

  • 这也不起作用。奇怪的是, dirname($_SERVER('PHP_SELF')) 是 /blabla/test ;在 preg 替换 echo$dossier 之后也是 /blabla/test
  • 啊,是的,忘记了星号。 trincot 的答案可能更适合 +。
  • 有什么好处,在哪里?
  • 另外,供将来参考PHP Regex Live 是一个用于测试这些东西的神奇网站。甚至在底部有一个小备忘单。
  • 明白了!所以是 '/^\/[0-9a-z]*\//' 非常感谢!!
【解决方案2】:

三个问题:

  • a-z 之间需要一个连字符,而不是下划线
  • 您需要允许多个这样的字符,方法是添加+
  • 你不想匹配整个字符串(被删除),所以不需要匹配到最后:删除$

这样就可以了:

/^\/[0-9a-z]+\//'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多