문제

$url = "example-com--folder";
$searchArray = array('/-/','/--/');
$replaceArray = array('.','/');
$url = preg_replace($searchArray, $replaceArray, $url);

내가 원하는 출력은 example.com/folder 하지만 지금받는 것은 example.com..folder

나는 이것이 적절한 정규 패턴이 없기 때문이라는 것을 알고 있지만, 그 패턴은 무엇일까요?

도움이 되었습니까?

해결책

순서를 변경하십시오 '/--/' 그리고 '/-/' 패턴 '/--/' 그렇지 않으면 먼저 확인됩니다 '/-/' 트럼프 '/--/'. 호출에 배열을 보간하지 마십시오 preg_replace.

$url = "example-com--folder";
$searchArray = array('/--/', '/-/');
$replaceArray = array('/', '.');
$url = preg_replace($searchArray, $replaceArray, $url);

대안 :

  • 여러 통화를 사용하십시오 preg_replace 순서대로 RES를 평가하려고합니다. 이것은 당신이 생각하는 것만 큼 불쾌하지 않습니다 preg_replace 배열 위로 고리하고 각각을 차례로 처리합니다.
  • 평가 된 교체를 사용하십시오

    $url = "www-example-com--folder";
    $replacements = array('-' => '.', '--' => '/');
    $url = preg_replace('/(--?)/e', '$replacements["$1"]', $url);
    
  • a 외관과 외모

    $url = "www-example-com--folder";
    $searchArray = array('/(?<!-)-(?!-)/', '/--/');
    $replaceArray = array('.', '/');
    $url = preg_replace($searchArray, $replaceArray, $url);
    

다른 팁

이것은 PHP입니다.

두 번째 패턴에서 정확히 두 개의 하이픈을 원하는 것을 지정하려면 정량자가 필요합니다. 노력하다:

$searchArray = array('/-/','/-{2}/');

곱슬 괄호는 정확히 필요하다고 말합니다 N 앞의 패턴의 '

여기에 있습니다 좋은 참조.

이것이 작동하는지 확인하십시오.

$url = "example-com--folder";
$searchArray = array('([^-])-([^-])','--');
$replaceArray = array('$1.$2','/');
$url = preg_replace("$searchArray", "$replaceArray", $url);

이것이 말하는 것은 "일치하는 것 - 전후에 대시가없고 그것을 a로 바꾸는 것"입니다. 및 "Double -Double -With /". 분명히, 당신은 이것을 원래와 뒤쪽에 ([^-])를 추가 하여만 2 개의 대시로 제한하도록 이것을 확장 할 수 있습니다. 그대로 "-----"는 "//"가 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top