2010-01-27 3 views
1

는 여기에 내가 결과가 src="http://domain.com/index.php 될 것으로 기대 간단한 preg_replace이다간단한 PHP preg_replace이다 질문

$string = 'src="index.php'; 
$string = preg_replace("/(src=('|\")+[^(http:|https:)])/i", "src=\"http://domain.com/", $string); 
echo $string; 

입니다하지만 src="http://domain.com/ndex.php 것으로 밝혀졌습니다. 내가 여기서 뭔가 빠진해야

.. 정말 엉망 정규식의

답변

5

. 정확히 달성하려는 것은 무엇입니까? URL이 http 또는 https로 시작하지 않고 도메인을 추가하려는 경우 어떻게됩니까? 그렇다면, 조금 벗어났습니다.

$string = preg_replace('/src=(\'|")?(?!htts?:)/i', 'src="http://domain.com/'); 

은 마크에 더 가깝습니다.

이 정규식의 기능은 무엇입니까? 대한 같습니다 :

  • src=
  • 선택적 http: 또는 https:
  • 를 구분 모든 할 경우 다음 중 하나 ' 또는 "
  • 하지 다음

참고 :{?!...)이라는 부정적인 의미 표기이며 zero-width assertion의 한 예입니다. 여기에서 "제로 너비"는 입력을 소비하지 않음을 의미합니다. 이 경우에 "따르지 않음"을 의미합니다.

정규식은 무엇을하나요? 그것은 외모에 대한 :

  • src=
  • 하나 이상의' 또는 " 문자
  • 합니다 ([^...] 구조가 무엇을 의미하는지 그건) (http:|https:)
  • 모든 아니라고 한 문자와 대소 문자를 구별하지 않음

참고 : 해당 문자의 하지 한 모든 문자를 의미

[^():https] 

:

[^(http:|https:)] 

은 동일합니다.

+0

작은 뭔가, 작은 따옴표가 – Scuzzy

+0

@Scuzzy을 탈출해야합니다 그것을 테스트. – cletus

0

구조체 [^(http:|https:)]이 올바르지 않습니다. (, h, t, p, :, |, s 또는 )을 제외한 모든 문자와 일치합니다.

0
$string = 'src="index.php'; $string = preg_replace("/src=('|\")?(?!htts?:)/i", "src=\"http://domain.com/", $string); echo $string; 

이 시도 : 고정 감사 : 나 자신