문제
BBCode의 좋은 Java 구현을 사용한 사람이 있습니까? 나는보고있다
- javabbcode : 볼 것이 없습니다
- Kefir-BB : 알파로 등재되었습니다
- Jboss 소스 코드의 BBCode 파서.
더 나은 옵션이 있습니까?
해결책
Kefirbb 0.6의 현재 버전은 더 이상 베타로 나열되지 않습니다. KefirbB 파서는 내 자신의 태그로 구성하고 확장하기가 매우 쉽습니다.
(이게 최선이다 bbcode 지금까지 찾은 파서)
또한이 코드를 찾았습니다 fyhao.com, 그러나 그것은 잘못된 중첩 태그로부터 당신을 보호합니다 (따라서 입력 한 입력 사용자를 구문 분석하는 데 적합하지 않음) :
public static String bbcode(String text) {
String html = text;
Map<String,String> bbMap = new HashMap<String , String>();
bbMap.put("(\r\n|\r|\n|\n\r)", "<br/>");
bbMap.put("\\[b\\](.+?)\\[/b\\]", "<strong>$1</strong>");
bbMap.put("\\[i\\](.+?)\\[/i\\]", "<span style='font-style:italic;'>$1</span>");
bbMap.put("\\[u\\](.+?)\\[/u\\]", "<span style='text-decoration:underline;'>$1</span>");
bbMap.put("\\[h1\\](.+?)\\[/h1\\]", "<h1>$1</h1>");
bbMap.put("\\[h2\\](.+?)\\[/h2\\]", "<h2>$1</h2>");
bbMap.put("\\[h3\\](.+?)\\[/h3\\]", "<h3>$1</h3>");
bbMap.put("\\[h4\\](.+?)\\[/h4\\]", "<h4>$1</h4>");
bbMap.put("\\[h5\\](.+?)\\[/h5\\]", "<h5>$1</h5>");
bbMap.put("\\[h6\\](.+?)\\[/h6\\]", "<h6>$1</h6>");
bbMap.put("\\[quote\\](.+?)\\[/quote\\]", "<blockquote>$1</blockquote>");
bbMap.put("\\[p\\](.+?)\\[/p\\]", "<p>$1</p>");
bbMap.put("\\[p=(.+?),(.+?)\\](.+?)\\[/p\\]", "<p style='text-indent:$1px;line-height:$2%;'>$3</p>");
bbMap.put("\\[center\\](.+?)\\[/center\\]", "<div align='center'>$1");
bbMap.put("\\[align=(.+?)\\](.+?)\\[/align\\]", "<div align='$1'>$2");
bbMap.put("\\[color=(.+?)\\](.+?)\\[/color\\]", "<span style='color:$1;'>$2</span>");
bbMap.put("\\[size=(.+?)\\](.+?)\\[/size\\]", "<span style='font-size:$1;'>$2</span>");
bbMap.put("\\[img\\](.+?)\\[/img\\]", "<img src='$1' />");
bbMap.put("\\[img=(.+?),(.+?)\\](.+?)\\[/img\\]", "<img width='$1' height='$2' src='$3' />");
bbMap.put("\\[email\\](.+?)\\[/email\\]", "<a href='mailto:$1'>$1</a>");
bbMap.put("\\[email=(.+?)\\](.+?)\\[/email\\]", "<a href='mailto:$1'>$2</a>");
bbMap.put("\\[url\\](.+?)\\[/url\\]", "<a href='$1'>$1</a>");
bbMap.put("\\[url=(.+?)\\](.+?)\\[/url\\]", "<a href='$1'>$2</a>");
bbMap.put("\\[youtube\\](.+?)\\[/youtube\\]", "<object width='640' height='380'><param name='movie' value='http://www.youtube.com/v/$1'></param><embed src='http://www.youtube.com/v/$1' type='application/x-shockwave-flash' width='640' height='380'></embed></object>");
bbMap.put("\\[video\\](.+?)\\[/video\\]", "<video src='$1' />");
for (Map.Entry entry: bbMap.entrySet()) {
html = html.replaceAll(entry.getKey().toString(), entry.getValue().toString());
}
return html;
}
BTW javabbcode는 OpenSource 프로젝트의 일부입니다. Javabb.
다른 팁
더 나은 선택은 Wiki Markup을 사용하는 것입니다. 현재 문서 시스템에 큰 성공을 거두고있는 Mylyn Wikitext 패키지를 사용해 볼 수 있습니다.
그러나 이것은 당신의 문제에 대한 답이 아닙니다. 당신이 시도하는 것이 당신이 이미 자동으로 가지고있는 포럼 텍스트를 구문 분석하는 경우 : -i.
더 나은 선택은 Wiki Markup을 사용하는 것입니다.
BBCode에 익숙하고 다른 비전 마크 업 형식을 배우는 데 크게 관심이없는 기술 사용자가없는 한.
과거에 정규 표현식을 성공적으로 사용하여 HTML과 BBCode 사이를 뒤집습니다. 각 태그를 다루는 표현 목록을 정의하고 각 태그의 패턴을 사전 컴파일하십시오. 그런 다음 각 표현식으로 문자열을 반복적으로 변환합니다. 두 가지 방식으로 작동합니다. 성능은 실제로 꽤 좋으며 자신의 방언/확장에 쉽게 적응할 수 있습니다.
단점은 Regex가 항상 운동하기에 간단한 것은 아니라는 것입니다.
BBCode 구문 분석 및 HTML로 변환하는 또 다른 Java 옵션은 Prime Transformer입니다.
https://github.com/inversoft/prime-transformer
우리는 특정 용도로 이것을 구축했지만 일반적인 소비를 위해 충분히 일반적인 상태로 유지하려고 노력했습니다. Github의 방문 페이지에 모이는 방법에 대한 기본 예가 있습니다.