문제
$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 개의 대시로 제한하도록 이것을 확장 할 수 있습니다. 그대로 "-----"는 "//"가 될 것입니다.
제휴하지 않습니다 StackOverflow