正则表达式可以在测试器中使用,但不能在Sublime Text 3中使用

约翰·威克

在字符串中

 <td class="useragent"><a href="/useragents/parse/627832-chrome-windows-blink">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36</a></td>

我正在尝试提取并复制到剪贴板

Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 60.0.3112.113 Safari / 537.36

使用位于https://regexr.com/的正则表达式测试器,我发现此正则表达式可以实现我所寻求的功能:

(?<=<td class="useragent"><a href=".*">).*(?=</a>)

当我在Sublime Text中尝试时,它没有。我猜想这与RegEx的不同“风味”有关,那么如何更改此RegEx以与Sublime Text一起使用?

维克多·史翠比维

Sublime Text 3正则表达式解决方案

您不能在PCRE正则表达式中使用未知长度的后视(这是Sublime Text 3中使用的正则表达式库)。但是,由于使用的是正向后视,因此您可以改用\Kmatch reset运算符(它将丢弃所有与匹配存储器缓冲区相匹配的文本)。

另外,您可以考虑一些增强功能:

  • ".*"可能会跨标签溢出,请"[^"]*"改用
  • .*</a>可能到达</a>一行的最后一个,用于.*?</a>到达第一个
  • 如果<a>节点中有换行符,请使用(?s)DOTALL内联修饰符跨行进行.*?匹配

使用

(?s)<td class="useragent"><a href="[^"]*">\K.*?(?=</a>)
                                          ^^ 

请参阅regex演示

ST3测试:

在此处输入图片说明

请参阅regular-expressions.info ,在总体正则表达式匹配保持文本与当前匹配

使用DOM解析的PHP后备

实际上,您应该谨慎地从任意HTML解析数据。如果要从大型HTML获取所需的所有文本,则应考虑使用成熟的HTML DOM支持技术。这是一个使用PHP的示例(请参见在线PHP演示):

$text = <<<EOD
<td class="useragent"><a href="/useragents/parse/627832-chrome-windows-blink">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36</a></td>
EOD;
$domDocument = new DOMDocument;
$domDocument->loadHTML($text, LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($domDocument);
$nodes = $xpath->query('//td[@class="useragent"]/a');
$res = [];
foreach($nodes as $txt) { 
   array_push($res, $txt->textContent);
}
print_r($res);

结果:

Array
(
    [0] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
)

在这里,$text是你的HTML文本,//td[@class="useragent"]/a是一个XPath是获取所有td其节点class的属性值等于useragent,然后抓住a它们内部节点。实际文本用返回$txt->textContent

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Sublime Text 3中使用xmllint?

正则表达式可以在Pythex上正常工作,但不能在Python中工作

Sublime Text tmLanguage文件中的正则表达式不使用多行

无法在Sublime Text 3中使用scss-lint

Sublime Text 3使用的正则表达式类型?

我的正则表达式可以在regex101上使用,但不能在python中使用?

正则表达式可在浏览器上使用,但不能在Node.js中使用

Reddit用户名的正则表达式可在Google表单中使用,但不能在Python中使用

在Sublime Text中匹配多行正则表达式

在Sublime Text中使用正则表达式会导致堆栈空间不足错误

如何在Sublime Text 3中使用正则表达式修改多个文件中的链接

正则表达式可以在find中使用,但不能在.sublime-syntax文件中使用

通配符/正则表达式不能在snakemake中使用?

正则表达式可在VS Code搜索/替换中使用,但不能在sed脚本中使用

如何在Sublime Text 3中使用git bash

使用Sublime Text 3编辑器打开的txt文件中使用正则表达式查找重复项

正则表达式可在终端中使用,但不能在Perl脚本中使用

正则表达式可在Chrome上使用,但不能在Safari中使用

使用Sublime Text查找在搜索模式中突出显示正则表达式组

正则表达式可在.NET中使用,但不能在javascript中使用

正则表达式可以在在线测试工具中使用,但不能在我的应用中使用

使用Sublime Text 3替换正则表达式

正则表达式可以在PHP中运行,而不能在Erlang中使用。为什么?

如何在Sublime Text 2中使用正则表达式替换括号之间的大写字母?

为什么我的正则表达式不能在JS中使用?

如何使用正则表达式和Sublime Text替换制表符包裹的文本?

PHP Sublime Text 使用查找和替换正则表达式

在 Sublime Text 中使用正则表达式将所有 ID 替换为具有特定名称的类

Sublime Text 3 正则表达式(行跳转)