【发布时间】:2009-08-28 23:32:24
【问题描述】:
考虑以下标记输入:
* 第 1 行 * 第 2 行 :* 2.1 行 :* 第 2.2 行 * 第 3 行这通常编码为:
- 第 1 行
- 第 2 行
- 2.1 行
- 2.2 行
- 第 3 行
我的问题:
- 用单行表示相同的输入有什么好的表示方法?
- 生成对应XHTML的正则表达式是什么?
例如,单行输入格式可以是:
> 1号线 > 2号线 >> 2.1号线 >> 2.2号线 > 3号线> 是无序列表项分隔符。我选择了>,因为文本可能包含典型的标点符号。使用 »(或其他类似的非 104 键键)会很有趣,但输入起来并不容易。
行输入格式也可以是:
[第 1 行][第 2 行][第 2.1 行][第 2.2 行]][第 3 行]更新 #1 - 问题稍微简单一些。巢的数量可以限制为三个。 n 级深度的通用解决方案仍然很酷。
更新 #2 - XHTML,而不是 HTML。
更新 #3 - 另一种可能的输入格式。
更新 #4 - 非常欢迎 Java 解决方案(或纯正则表达式)。
更新 #5
修改后的代码:
String in = " * Line 1 * Line 2 > * Line 2.1 * Line 2.2 < * Line 3";
String sub = "<ul>" + in.replace( " > ", "<ul>" ) + "</ul>";
sub = sub.replace( " < ", "</ul>" );
sub = sub.replaceAll( "( | >)\\* ([^*<>]*)", "<li>$2</li>" );
System.out.println( "Result: " + sub );
打印以下内容:
Result: <ul><li>Line 1 </li>* Line 2<ul>* Line 2.1<li>Line 2.2</li></ul>* Line 3
【问题讨论】:
-
那么,我是否应该在回答中忽略“我的问题”上方的所有内容?这似乎是不需要的信息,因为您没有在问题中引用它。
-
"对于相同的输入,使用单行什么是好的表示?" -- 该问题是指问题顶部给出的标记输入。这可能没有必要,但我宁愿稍微多余,也不愿留下模棱两可的空间。
-
嵌套括号,恕我直言,只会吸引具有 LISP 背景的普通用户......但我确实修复了我的答案,给出了我认为对你有用的东西。
标签: html regex xhtml wiki user-input