php - 找不到标记之间的正则表达式文本

标签 php javascript regex

<分区>

我正在尝试匹配 html 标签的内容/文本中的单词 contact。我可以获取标签之间的所有文本:

http://rubular.com/r/IkhG2nhmnS

与:

(?<=\"\>)(.*?)(?=\<\/)

但是我只想搜索单词contact,它不起作用:

http://rubular.com/r/We44nHisLf

与:

(?<=\"\>)(contact*?)(?=\<\/)

谁能指导我如何在 html 标签的文本/内容中匹配我想要的词。在上述情况下,我想查找/匹配单词 contact

谢谢你的帮助

最佳答案

描述

此正则表达式将提取 anchor 标记中 href 内的所有文本。

<a\b[^>]*?\bhref=(['"])([^'"]*)\1[^>]*?>

enter image description here

群组

组 0 将包含来自 <a 的整个匹配字符串到 >

  1. 收到 href 部分的公开报价。这稍后在正则表达式中用作 \1匹配关闭引号
  2. 接收href值的内容

免责声明

使用正则表达式可能不是解析 HTML 的好主意,因为有许多边缘情况可能会使正则表达式出错。

PHP 代码示例:

<?php
$sourcestring="your source string";
preg_match_all('/<a\b[^>]*?\bhref=([\'"])([^\'"]*)\1[^>]*?>/im',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

$matches Array:
(
    [0] => Array
        (
            [0] => <a href="contact">
        )

    [1] => Array
        (
            [0] => "
        )

    [2] => Array
        (
            [0] => contact
        )

)

总结

  • <a匹配<a
  • \b单词 char (\w) 和 不是单词字符的东西
  • [^>]*?任何字符,除了:'>'(0 次或更多次 (匹配尽可能少的数量))
  • \b单词 char (\w) 和 不是单词字符的东西
  • href=匹配href=
  • (分组并捕​​获到\1:
  • ['"]任何字符:''', '"'
  • )\1
  • 结束
  • (分组并捕​​获到\2:
  • [^'"]*任何字符,除了:'''、'"'(0 或 更多次(匹配最多的 可能))
  • )\2
  • 结束
  • \1捕获匹配的内容\1
  • [^>]*?任何字符,除了:'>'(0 次或更多次 (匹配尽可能少的数量))
  • >匹配>
  • )分组结束

关于php - 找不到标记之间的正则表达式文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16793436/

相关文章:

javascript - 使用正则表达式在第一个字母处分割字符串

php - 如何上传图像并将图像表id与帖子id连接(php mysql)

php - 如何使用苹果推送通知 p12 证书文件通过代码设置 ios 平台?

javascript - WebStorm 中导入的路径别名

python - Pandas 按文本列中的子字符串过滤行

php - 在 PHP 正则表达式中包含回车符

php - 语句在不应该返回 false 时返回

php - 如何获取laravel模型中的所有记录

javascript - 如何更改原点位置以在 HTML5 Canvas 中旋转绘制的线条

javascript - 无法使用 jQuery .post() 使数据表工作