gpt4 book ai didi

regex - 如何在 Delphi 中获取正则表达式的命名组?

转载 作者:行者123 更新时间:2023-12-03 15:30:37 24 4
gpt4 key购买 nike

我正在尝试在 Delphi 上使用正则表达式来对 HTML 进行正则表达式并获取一些数据。

我的目标是创建一个具有以下语法的查询字符串:

?namedGroup1=valueNamedGroup1&namedGroup2=valueNamedGroup2

我有 n 个正则表达式数组:

array[0] = '<div (id="(?<id>[a-zA-Z0-9]+)"|name="(?<name>[a-zA-Z0-9]+))"';

我的html:

<h1>bla bla bla</h1> <div id="home">

如果我使用 PHP 中的内置正则表达式应用此正则表达式,它将返回一个关联数组

RegArray[0] = '<div id="home">'
RegArray['id'] = 'home'

如果我执行 foreach,我可以轻松获取命名组的列表,并且可以创建我的查询字符串:

?id=home

问题是我不知道正则表达式是否与指定的组 ID 或名称匹配,我需要知道这一点。

Delphi 只返回一个简单的数组

RegArray[0] = '<div id="home">'
RegArray[1] = 'home' // ID or NAME?

那么,如何获取指定组和指定组值?

这是我的代码:

var RegEx: TRegEx;
begin
RegEx := TRegEx.Create(array[0], [roIgnoreCase,roMultiline]);
Match := RegEx.Match(html);
if (Match.Success) then
begin
//get the group here.
end;

我也尝试过这个类(class):http://www.regular-expressions.info/delphi.html

但是没有成功

最佳答案

我认为您在查询中犯了一个错误:看看模式的最后两个字符 - 它显然是不平衡的!看起来您未能从 PHP 复制粘贴;-)

  • 您的:<div (id="(?<id>[a-zA-Z0-9]+)"|name="(?<name>[a-zA-Z0-9]+))"
  • 我的:<div (id="(?<id>[a-zA-Z0-9]+)"|name="(?<name>[a-zA-Z0-9]+)")

DI RegExp demo

使用 http://www.yunqa.de/delphi/doku.php/products/regex/index 的 pcre.org 引擎 + 交互式编辑器

<小时/>

I also tried this class: http://www.regular-expressions.info/delphi.html

该页面立即显示另一个可用于调试 RegEx 程序的交互式编辑器:http://www.regexbuddy.com/test.html

我想知道你为什么不尝试使用它......

<小时/>

我仍然认为某些 HTML 解析器会更快、更可靠。考虑 HTML 提取,例如

 <!-- <p><div name="bla-bla"> ... </div></p> -->

或类似

 <img src="...." alt='Press to insert <div id="123"> to you sample text' />

或类似

 <DIV ID="my cool id" />
<小时/>

话题发起人在下面做了他自己的回答,主要是向我提出的问题。

The problem is not the Regex,

只需用笔和纸数一下引号和箭头,以及它们打开和关闭的顺序。您的模式是 ( ... " ... ) .... " - 这是不平衡的!

is the Delphi.

Delphi 语言与正则表达式没有任何关系。库/组件可以做到。所以这种说法没有任何意义。您可能会说您测试了损坏的库,但没有测试语言本身。

My regex with PHP works fine,

这应该意味着您在 PHP 中具有不同的正则表达式模式(您没有在此处复制 PHP 源代码)或“问题出在 PHP 中”

实际上我们既没有看到Delphi源码,也没有看到PHP源码。

array[0] = '<div (id="(?<id>[a-zA-Z0-9]+)"|name="(?<name>[a-zA-Z0-9]+))"'; - 我认为两者都不正确。

所以我认为您的 PHP 程序和 Delphi 程序中的代码和模式不匹配。显示正在使用的真实代码的引号。

the thing is that DELPHI doesn't return me

  1. 再说一次,这没有任何意义。 Delphi 只是一种语言,它对 RegEx 一无所知。
  2. 就在上面,您看到了使用 PCRE 引擎的 Delphi 编写的程序的屏幕截图 - 考虑到修复后的模式,它确实返回名称和值。因此,即使在模糊意义上,这种说法也显然是错误的。德尔福确实返回了<name, value>配对。

Also, I can't change the whole system to use a HTML parser, the regex is already working

然后您需要调整正则表达式以正确解析上面显示的 HTML 片段。

关于regex - 如何在 Delphi 中获取正则表达式的命名组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20767011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com