PHP:如何去除所有的正则表达式?

3

如何从字符串中删除所有正则表达式特殊字符?

例如: 我有一个 "/^bla\/bla\/bla\//i",我想要的是 "bla/bla/bla/"


我猜在我思考的背景下这不是真正可能的。感谢你们的回复。


7
你希望如何处理前瞻?还有像 .(句点)这样的元字符,或者像 [abc] 这样的字符类?等等。请先定义你想要处理的正则表达式子集。 - Bart Kiers
这是对这个问题的重申吗?http://stackoverflow.com/questions/2216494/php-how-do-i-convert-a-regular-expression-to-an-example-match 如果是,请关闭其中一个。 - John Carter
你希望如何处理括号?如果你有/^bla\/(bla)\/bla\//i,你想要bla//bla/还是只是去掉括号? - Anthony
3个回答

1

0
    <?php 
    $string = "/^bla\/bla\/bla\//i";
    $patterns = array(
        "/\/\^([\w]+)/i" => "$1/",
        "/[\/]{2,}i$/i" => "/",
        "/\\\/" => "",
        "/[\/]{2,}/" => "/",
        "/\/$/" => "",
    );
    echo preg_replace(array_keys($patterns),$patterns,$string);

    //OR, this:
    echo    "\n";

    $string = "/^bla\/bla\/bla\//i";
    $pattern = "/(?![\/\w]$)([\w]+)/";
    preg_match_all($pattern,$string,$matches);
    echo join('/',$matches[0]);
?>

1
有些人可能不同意将正则表达式分解为逻辑操作的片段,就像第一个例子一样,这是一种风格选择。尽管如此,我认为底部的方法更好,最好捕获您想要的内容,而不是费心替换您不想要的内容。 - J. Martin

0

我不太明白你想做什么,但如果你只是想从字符串中删除某些字符,最好使用strtr()。首先,它比使用正则表达式要快得多,而且可能更易读。

编辑:实际上,我真的不明白你想实现什么。


OP没有说他试图使用正则表达式,而是试图将表示字符串的正则表达式转换为另一个字符串。 - Avi
是的,我发帖后意识到了这一点。现在我有些困惑。 - John Carter
也许最好删除这个答案? - Bart Kiers
我承认,这是一个非常糟糕的问题,即最好看到真实数据和真实期望结果,然后我们可以定义一个更优雅的解决方案... - J. Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接