2010-01-28 38 views
1

我正在寻找一个快速库简单通配符逻辑/类使用像下面的表达式解析纯文本:解析文本在Java/C/Objective-C的

文字为:<b>Name:</b>John<br><i>Age</i>32<br>

模式是:{*}Name:</b>{%}<br>{*}Age</i>{%}<br>

它会找到我两个值:John32。意图是解析简单的HTML网页而不涉及重型工具。它不应该在内部使用字符串操作或正则表达式,但可能会通过char分析进行char。

+0

你想要Java或C或ObjC吗?他们是完全不同的语言。 – kennytm 2010-01-28 20:35:45

+0

最终将Objective-C,但我可以从C/Java端口算法 – 2010-01-28 20:45:16

回答

0

由于您似乎在要求用户指定所需的HTML内容,因此在此处使用正则表达式可能是正常的(为什么您对此感到厌恶?)。这不是HTML解析,而是简单的文本匹配,这是正则表达式的设计目的。

下面是一个例子:

$match =~ s/{\*}/.*?/g; 
$match =~ s/{%}/(.*?)/g; 
$html =~ /$match/; 

这将让你在拍摄群体需要什么。

+0

基本上它被用于小应用程序下载类似于HTML的(wap)文件并提取一些数字从文本结构不能保证是相同的,但它的某些部分可以被识别并视为固定的,就像从手机银行页面获取数据一样,您可能需要查找“卡号: {%}
{ *} 余额: {%}
'。这样做与正则表达式我会猜想让事情变得莫e复杂。 – 2010-01-28 20:57:51

+0

是什么让你觉得在应用程序的深处使用正则表达式会让整个事情变得更加复杂?简化文本匹配是正则表达式存在的全部原因。 – 2010-01-28 21:02:06

+0

你可能是对的,我现在就去试试。谢谢。 – 2010-01-28 21:14:22

0

正则表达式替换将工作。只要让它像“John%32”一样返回两个值,然后分割响应以获得两个单独的值。

0

这里手动实现的逐字符解析确实没有什么好处,因为这类问题已经被大量解决,并且已经解决了这些类型的问题。

  • 如果你正在处理一个非常标准化的数据集(即你上述模板的格式完全一样在每一种情况,无失结束标记的可能性,被插入奇的地方,HTML等。 ),正则表达式是解析这类数据的完美工具。
  • 如果HTML无法保证是完美的,那么最直接的解决方案是使用工具将HTML结构加载到DOM中,并在文档树中找到适当的元素。

开发一种逐个字符的方法可能最终将等同于手动实现上述两个选项之一,这不是一个微不足道的实现。

+0

我不能使用DOM,因为我想要一个纯文本解析解决方案,以便我可以解析部分标记名称,例如。我不想要正则表达式,因为文本解析可能会很长。基本上我想要算法解析基于通配符的模式的文本,只是想'任何字符序列要忽略'和'任何字符序列存储并返回给用户'是{*}和{%}。 模式是用户定义的,可以轻松解析文本数据并提取它的特定部分。 – 2010-01-28 20:53:04

+0

看来你所描述的本质上是一个带有自定义语法的正则表达式版本。正则表达式库相当成熟,应该能够处理相当大的页面大小。也许一个解决方案是采取您的自定义语法,并将其翻译成标准的正则表达式语法? – 2010-01-28 20:59:58

+0

有趣的是,现在人们倾向于使用非常高级别的API,而不管任务如何:-)我想最终的方法将是20-30行代码,但很难让自己坐在纸和铅笔上,做一些思考而不是使用谷歌搜索...:-( – 2010-01-28 21:01:48