gpt4 book ai didi

用于在 HTML 中查找带有输入标签的表单的 C# 正则表达式?

转载 作者:行者123 更新时间:2023-11-28 04:42:52 25 4
gpt4 key购买 nike

我有一个简单的问题:我想构造一个匹配 HTML 表单的正则表达式,但前提是该表单有任何输入标签。示例:

应匹配以下内容(忽略属性):

..
<form>
..
<input/>
..
</form>
..

但以下不应该(忽略属性):

..
<form>
..
</form>
..

我已经尝试了从环顾四周到捕获组的所有方法,但它很快就变得复杂了。我想相信有一个简单的正则表达式可以解决问题。请注意,正则表达式根据 HTML 代码对开始和结束标记进行配对很重要,这意味着以下内容不起作用:

<form>.+<input/>.+</form>

因为这样匹配错误:

..
<form> <--- This is wrongly matched as the opening tag
..
</form>
<form> <-- This is the correct opening tag of the correct form
..
<input/>
..
</form> <--- This is matched as the closing tag
..

编辑:

我已经制作了符合我要求的正则表达式;我现在的问题是如何去做,但如何简单/优雅地去做。对我来说,这根本不简单也不优雅:

<form>
(.(?<!</form>))+
<input/>
(.(?<!</form>))+
</form>

最佳答案

I want to believe there is a simple regex to capture the problem

心愿不成。没有证据支持所有问题都可以用正则表达式解决的命题,并且有大量证据反对。你的信仰不对。

正则表达式可识别的语言集被称为——毫不奇怪——正则语言。所有常规语言的一个很好的特性是它们可以被具有有限多个状态的设备识别。因此,您可以通过问自己“我需要无限数量的状态来识别这种语言吗?”这个问题来快速确定一种语言是否

考虑匹配括号的语言:()、()()、(())、()(()) 等等。要识别这种语言,您必须跟踪有多少打开的括号正在等待关闭,因此您需要无限数量的状态。因此这种语言不是正则语言,因此不能用正则表达式匹配。

HTML 显然是父语言,但更复杂,因为现在有无数种不同的“父语言”。每个标签就像一个开括号,必须与其相应的结束标签匹配。由于这是一种非常复杂和困难的非常规语言版本,显然它不可能是一种常规语言。因此无法与正则表达式正确匹配。

识别 HTML 模式的正确工具是 HTML 解析器。

关于用于在 HTML 中查找带有输入标签的表单的 C# 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2773816/

25 4 0