【发布时间】:2011-03-26 01:36:34
【问题描述】:
假设 $d 是一个目录路径,我想确保它以一个斜杠 (/) 开头和结尾。它最初可能有零个、一个或多个前导和/或尾随斜杠。
我试过了:
preg_replace('%^/*|/*$', '/', $d);
它适用于前导斜杠,但令我惊讶的是,如果 $d 至少有一个斜杠,则会产生 两个 斜杠。如果主题是,例如,'foo///',那么 preg_replace() 首先匹配并用一个斜线替换三个尾随斜线,然后匹配末尾的零个斜线并用斜线替换它。 (您可以通过将第二个参数替换为 '[$0]' 来验证这一点。)我觉得这很违反直觉。
虽然有许多其他方法可以解决基本问题(我实现了一个),但这对我来说成了一个 PCRE 难题:单个 preg_replace 中的什么(标量)模式可以完成这项工作?
附加问题(编辑)
谁能解释为什么这个模式与它在字符串末尾的方式匹配,但在开头却没有类似的行为?
【问题讨论】:
标签: php regex preg-replace pcre