我有一个字符串,我想用正则表达式解析。它具有以下格式:
“随机文字[id值]更多文字[id value]其他内容”
我想找到与[id value]匹配的模式。我是否必须做一些特别的事情来返回两场比赛而不是一场比赛。我担心的是我只会回复这场比赛:
"[id value] more text [id value]"
使用这样的模式:\[((.|\n)*?)\]
我不是很擅长正则表达式,所以这似乎超级琐碎。正则表达式解析器是否从左向右移动通过字符串?
然后我有一个更复杂的跟进问题。如果我有嵌套模式怎么办?
"random text [id [id value]] more text [id value] other stuff"
我希望能够将[id [id value]]
作为匹配项并将[id value]
作为匹配项进行捕获。是否可以编写一个将同时返回[id [id value]]
和[id value].
的正则表达式。在这种情况下,我想检查平衡括号,然后在最后一个匹配结束,是否可以使用正则表达式?
答案 0 :(得分:1)
匹配括号是使用有限自动机无法完成的简单任务的规范示例 - 正则表达式只是描述有限自动机的语言。匹配括号需要无上下文语法。
当然,现代正则表达式库的功能远远超出了基本的正则表达式。所以你可以管理一些东西。不过,我不会抱太多运气。
你可能能够在更短的时间内创建一个简单的递归下降解析器,而不是让你弄清楚如何将一个正则表达式折叠成一个主要起作用的东西。