正则表达式无法捕获

时间:2018-11-17 11:43:51

标签: regex regex-negation regex-lookarounds regex-group

我正在尝试从以下文本中捕获地址数据。

<address>
Firstname Lastname<br />
Address 1<br />
ZIP City<br />
Country</address>

我尝试过的正则表达式是(?<=>)(.*)(?=<\Q/\Eaddress)

由于某种原因,它无法捕获任何东西。

我对regex完全陌生,所以我真的什么都不懂。我只知道,我发现以下正则表达式捕获

之间的数据
(?<="from here")(.*)(?="to here")

我也能够逃脱斜线。

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

尽管您应该避免使用正则表达式来解析HTML,但是由于您的情况似乎是标记的简单非嵌套情况,因此您可以使用以下正则表达式捕获标记之间的所有数据,并捕获组1中的数据。

(?s)<address>(.*?)<\/address>

由于您的数据似乎出现在多行中,因此您需要在正则表达式中使用(?s)标志,该​​标志使点可以匹配新的行字符。

Here is the Demo

而且,在您自己的正则表达式中,您只需进行少许校正并使用(?s)标志(如上文所述)即可使其工作。您的正则表达式版本可以像这样更正和使用,

(?s)(?<=>)(.*?)(?=<\/address)(用/转义\

OR

(?s)(?<=>)(.*?)(?=<\Q/\Eaddress)(无需转义/如果将其放在\ Q和\ E之间)

Demo for your regex