-3

php で preg_replace() を使用してコンマ、スペース、ハイフンをアンダースコアに置き換える方法。

(i.e) http://test.com/test-one,two three  to http://test.com/test_one_two_three

(i.e) http://test.com/test, new one  to http://test.com/test_new_one

私はreg_expがとても苦手です

4

4 に答える 4

2

あなたの文字列:

$link = 'http://test.com/test-one,two three';

preg_replace

echo preg_replace('/[\s,-]+/', '_', $link);

str_replace

$arr = array(",", " ", "-", "__");
echo str_replace($arr, "_", $link);
于 2013-09-13T06:00:54.950 に答える
2

このような何かがそれを行う必要があります:

<?php
    $subject = "http://test.com/test-one,two three";
    echo preg_replace ("/[, -]/" , "_", $subject);
?>
于 2013-09-13T06:02:25.760 に答える
1

PHPに追加したい機能のプレビューは次のとおりです。

function url_replace($url, $component, callable $callback)
{
    $map = [
        PHP_URL_SCHEME => 2,
        PHP_URL_HOST => 4,
        PHP_URL_PATH => 5,
        PHP_URL_QUERY => 7,
        PHP_URL_FRAGMENT => 9,
    ];

    if (!array_key_exists($component, $map)) {
        return $url;
    }
    $index = $map[$component];

    if (preg_match('~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~', $url, $matches, PREG_OFFSET_CAPTURE) && isset($matches[$index])) {
        $tmp = call_user_func($callback, $matches[$index][0]);
        return substr_replace($url, $tmp, $matches[$index][1], strlen($matches[$index][0]));
    }
    return $url;
}

あなたの質問に答えると、次のようになります。

$url = 'http://test.com/test-one,two three';
echo url_replace($url, PHP_URL_PATH, function($path) {
    return strtr($path, ', -', '___');
});

結果:

http://test.com/test_one_two_three
于 2013-09-13T06:59:08.333 に答える
0

楽しみのために、次のものもありstrtrます。

strtr('http://test.com/test-one,two three', '-, ', '___');
于 2013-09-13T06:33:46.933 に答える