在 Java / C / Objective-C 中使用简单的通配符逻辑解析文本

发布于 2024-08-19 04:49:15 字数 280 浏览 3 评论 0原文

我正在寻找一个快速的库/类来使用如下表达式解析纯文本:

Text is: Name:John
Age32< ;br>

模式为:{*}姓名:{%}
{*}年龄{%}

并且它会找到两个值:John32。 目的是在不涉及重型工具的情况下解析简单的 HTML 网页。它不应该在内部使用字符串操作或正则表达式,但可能会逐个字符进行解析。

I'm looking for a fast library/class to parse plain text using expressions like below:

Text is: <b>Name:</b>John<br><i>Age</i>32<br>

Pattern is: {*}Name:</b>{%}<br>{*}Age</i>{%}<br>

And it will find me two values: John and 32.
Intent is to parse simple HTML web pages without involving heavy duty tools. It should not be using string operations or regexps internally but probably do char by char parsing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

踏月而来 2024-08-26 04:49:15

由于您似乎要求用户指定您想要的 HTML 内容,因此在这里使用正则表达式可能没问题(为什么您讨厌它们?)。它不再是 HTML 解析,只是简单的文本匹配,这就是正则表达式的设计目的。

这是一个示例:

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

这会将您需要的内容留在捕获组中。

Since you appear to be asking the user to specify the HTML content you want, it's probably alright to use regular expressions here (why do you have an aversion to them?). It's not HTML parsing, anymore, just simple text matching, which is what regular expressions are designed for.

Here's an example:

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

Which will leave what you need in your capturing groups.

抚你发端 2024-08-26 04:49:15

正则表达式替换会起作用。只需让它同时返回两个值,如“John%32”,然后拆分响应以获得两个单独的值。

A regex replacement would work. Just get it to return both values together like "John%32" and then split the response to get the two separate values.

许一世地老天荒 2024-08-26 04:49:15

在这里手动实现逐个字符解析确实没有任何优势,因为此类问题已经基本上解决了。

  • 如果您正在处理一组极其规范化的数据(即,上面描述的模板在每种情况下的格式都完全相同,不可能丢失结束标记、在奇怪的位置插入 HTML 等),则正则表达式是一种非常适合解析此类数据的工具。
  • 如果不能保证 HTML 是完美的,那么最直接的解决方案是使用工具将 HTML 结构加载到 DOM 中,并在文档树中找到适当的元素。

开发逐个字符的方法最终可能相当于手动实现上述两个选项之一,这并不是一件容易实现的事情。

There's really no advantage to character-by-character parsing manually implemented here, as such problems have been by and large solved for these types of problems.

  • If you're dealing with an extremely normalized set of data (i.e. the template you described above is formatted exactly the same in every circumstance with no possibility of missing closing tags, HTML being inserted in odd places, etc.), regular expressions are a perfectly appropriate tool to parse this sort of data.
  • If the HTML can not be guaranteed to be perfect, then the most straightforward solution is to use a tool to load the HTML structure into a DOM and find the appropriate elements in the document tree.

Developing a character-by-character approach will probably end up being equivalent to manually implementing one of the above two options, which is not a trivial thing to implement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文