2014-03-06 7 views
1

PHP에서 사용자 정의 bb 코드 스크립트를 작성하고 있습니다. 너비, 높이 및 img 태그에 정렬과 같은 다른 매개 변수를 추가하는 옵션을 사용자에게 제공 할 수 있기를 바랍니다. 내가 그 특성을 변경하고 싶지 않다면 내가 잘 작동하는 스크립트 ... 정규 표현식을 제 자리에두면, 그 매개 변수는 언제나 같은 번호 ($ 2)에 해당하지 않기 때문에 어떻게 접근 할 것인가? ?사용자가 스크립트의 bb 코드에 선택적 매개 변수를 추가 할 수 있도록 정규식을 추가 할 수 있습니까?

"'\[img\](.*?)\[\/img\]'is" 

BBCode는 등이 다음과 같이 보일 것 같이

[img width=100 height=100 align=right]thelinktotheimage[/img] 

업데이트 : 기본적으로 만 허용하도록되어 있습니다 ... 이것에 대한 내 자신의 정규식을 작성하는 시도 폭, 높이, 또는 속성으로 = 정렬하고 = 기호 다음 숫자 또는 왼쪽, 오른쪽, 중간, 위쪽 또는 아래쪽의 문자열 패턴을 값으로 사용합니다. 어떤 이유로, 정규식이 내 테스트 문자열과 일치하지 않습니다. 나는 내가 매우 가깝다는 느낌을 가지고있다. 나는 희망한다. 어떤 아이디어?

^\[img(((width|height|align)=(([0-9]+)|(left|right|middle|top|bottom)))+)\](.*?)\[\/img\]$ 
+0

이러한 속성을 포함하면 bb 코드의 모양을 보여줄 수 있습니까? – clhereistian

+0

내 질문이 업데이트되었습니다. 모든 img 태그가 이러한 속성을 모두 가지는 것은 아닙니다. 일부는 정렬 만하고 다른 일부는 너비 및/또는 높이만 정렬하지 않을 수 있습니다. – ShoeLace1291

+0

당신은 html 태그로 이들을 파싱하거나 다른 곳에서 사용할 속성을 추출하기 만하려고합니까? 당신은 이것을 알지도 모르지만, php에 대한 bb_code 확장은 태그를 파싱하는데 도움이 될 수 있습니다. – clhereistian

답변

0

는 그냥 정규식 속성의 완전 임의의 수를 분석하기 어려울 것입니다,하지만 당신은 단지 3의 최대 (또는 다른 합리적으로 적은 수의)이있는 경우, 당신이 뭔가를 사용할 수 있습니다 like :

\[img (?:([a-zA-Z]+)="([a-zA-Z\d]+)")? ?(?:([a-zA-Z]+)="([a-zA-Z\d]+)")? ?(?:([a-zA-Z]+)="([a-zA-Z\d]+)")? ?].+\[\/img] 

다음은 일치하는 항목을 보여주는 링크입니다. 보시다시피 홀수 번호의 캡처는 속성 이름이고 evens는 값입니다. 이중 따옴표를 사용하지 않는다면 그냥 삭제하십시오. http://regex101.com/r/bN1jT3

+0

width, height 및 align 속성 만 허용하면 어떨까요? onclick 및 JavaScript를 추가 할 수 있기 때문에 모든 유형의 속성을 허용하는 것이 안전하지 않은 것처럼 보일 수 있습니다. – ShoeLace1291

+0

이런 종류의 패턴을 사용하면 홀수 번째 매치가 어떤 순서로도 도착할 수 있기 때문에 어쨌든 반환 된 후에 추가로 평가할 것입니다. 허용되는 속성 이름으로 돌아 오지 않는 문자열을 던지십시오. – CAustin

0

이렇게하면 preg_match_all() 함수를 거의 사용할 수 없지만 더 많은 매개 변수를 사용하면 악화 될 수 있습니다. 예를 들면 다음과 같습니다. 이 같은 것을 사용

<?php 
    $bb = "[img width=100 height=100 align=right]thelinktotheimage[/img]<br />[img width=100 height=100 align=right]thelinktotheimage[/img]"; 
    preg_match_all("'\[img(.{0,40})\](.*?)\[\/img\]'is", $bb, $matches); 
    print_r($matches); 
?>