考虑以下标记输入:
* 第 1 行 * 第 2 行 :* 2.1 行 :* 第 2.2 行 * 第 3 行
这通常编码为:
<ul> <li>第 1 行</li> <li>第 2 行</li> <ul> <li>2.1 行</li> <li>2.2 行</li> </ul> <li>第 3 行</li> </ul>
我的问题:
- 对于使用单行的相同输入,什么是好的表示?
- 生成相应 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