첫 번째 Newline Preg_replace 제거
-
13-09-2019 - |
문제
BBCode를 HTML로 변환하기 위해 PHP를 작성하고 있습니다.
이 bbcode를 변환하고 싶습니다.
[quote]
Hello World
[/quote]
다음에 :
<blockquote>Hello World</blockquote>
이것을 수행하는 데 사용하는 preg_replace 기능은 다음과 같습니다.
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
이것은 거의 내가 필요한 모든 것을 수행하지만, 내 문제는 그것이 'Hello World'전후에서 나온 것입니다.
<blockquote>
Hello World
</blockquote>
내가 이것을 어떻게 고칠 수 있는지 아이디어가 있습니까? 모두에게 매우 감사합니다.
해결책
이 정규 표현을 시도하십시오.
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
다른 팁
이중 인용물 내부에서 백 슬래시를 피해야합니다. " ["대신 " ["가 필요합니다.
가능성은 ''를 사용하는 것입니다.e
' Regex-Modifier, 예를 들어 전화하기 위해 trim
문자열에서 기능.
매뉴얼의 해당 페이지 인용 :
이자형 (
PREG_REPLACE_EVAL
)
이 수정자가 설정된 경우preg_replace()
교체 문자열에서 배경을 정상적으로 대체하고 PHP 코드로 평가하고 검색 문자열을 대체하는 결과를 사용합니다. 단일 따옴표, 이중 따옴표, 백 슬래시 (\
) 그리고NULL
Chars는 대체 후임자로 백 슬래시에 의해 탈출됩니다.뿐
preg_replace()
이 수정자를 사용합니다. 다른 PCRE 기능에 의해 무시됩니다.
예를 들어,이 코드는 귀하와 약간 다릅니다.
$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;
$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);
당신에게 줄 것입니다 :
string '<blockquote>Hello World</blockquote>' (length=36)
즉, trim
함수는 일치하는 것에 호출됩니다. 참고 문자열의 시작과 끝에서 모든 흰색 공간을 제거합니다. 최신 라인뿐만 아니라 공백과 표로.
(예를 들어, 예제 #4를 볼 수 있습니다. 수동 페이지 preg_replace
)
(이 경우에는 약간의 과잉 일 수 있습니다. 추가해야합니다.하지만 어쨌든 알게되어 기쁩니다)