【问题标题】:preg_replace, exact opposite of a preg_matchpreg_replace,与 preg_match 完全相反
【发布时间】:2010-05-03 17:26:52
【问题描述】:

我需要为这个 preg_match 正则表达式做一个完全相反的 preg_replace

preg_match('#^(\w+/){0,2}\w+\.\w+$#', $string);

所以我需要用空字符串替换所有无效的字符串 -> ''

所以它需要删除第一个/和最后一个/如果找到,以及所有无效字符,即唯一有效的字符是A-Za-z0-9_./(如果它不是字符串的第一个或最后一个字符)。

如何使用 preg_replace 完成此任务?

谢谢:)

【问题讨论】:

    标签: regex string preg-replace preg-match


    【解决方案1】:
    preg_replace('#^/|/$|[^A-Za-z0-9_./]#D', '', $subject);
    

    【讨论】:

    • A-z 应该是A-Z 吗?只是想知道并感谢:)
    • 是的,这是一个错字。 D 解决了字符串以 /\n (斜线然后换行)结尾的边缘情况。这个 / 在没有 D 的情况下被删除并允许使用它。它代表 PCRE_DOLLAR_ENDONLY (php.net/manual/en/reference.pcre.pattern.modifiers.php)
    • 好的,我不能在字符串末尾有 /,所以我不会使用这个 D 对吗?再次感谢。
    • 无论有没有 D,最后的 / 都会被删除。如果没有 D,以 /\n 结尾的字符串也会删除 /。
    • 我是从一个 XML 文档中抓取的,例如:<path>/apath/anotherPath/</path> 所以它需要删除 2 个斜杠,1 个在开头,1 个在结尾。我需要D吗?
    猜你喜欢
    • 2011-03-27
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多