正则表达式提供了一种声明性语言来匹配字符串中的模式。它们通常用于字符串验证,解析和转换。由于正则表达式未完全标准化,因此具有此标记的所有问题还应包含指定适用的编程语言或工具的标记。注意:要求HTML,JSON等正则表达式往往会遇到负面反应。如果有解析器,请使用它。
我正在尝试匹配所有没有“term”或“range”属性的HTML标签 这是 HTML 格式示例 日期: 12/01/10 我正在尝试匹配所有没有“term”或“range”属性的 HTML 标签 这是示例 HTML 格式 <span class="inline prewrap strong">DATE:</span> 12/01/10 <span class="inline prewrap strong">MR:</span> 1234567 <span class="inline prewrap strong">DOB:</span> 12/01/65 <span class="inline prewrap strong">HISTORY OF PRESENT ILLNESS:</span> Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum <span class="inline prewrap strong">MEDICATIONS:</span> <span term="Advil" range="true">Advil </span>and Ibuprofen. 我的正则表达式是:<(.*?)((?!\bterm\b).)> 不幸的是,这匹配所有标签...如果内部文本不匹配,那就太好了,因为我需要过滤掉除具有该特定属性的标签之外的所有标签。 如果您喜欢正则表达式,那么这对我有用。 (注意 - 不包括过滤掉评论、文档类型和其他实体。 其他警告;标签可以嵌入脚本、评论和其他内容中。) span标签(w/ attr)没有术语|范围属性 '<span (?=\s) (?! (?:[^>"\']|(?>".*?"|\'.*?\'))*? (?<=\s) (?:term|range) \s*= ) \s+ (?:".*?"|\'.*?\'|[^>]*?)+ >' 任何标签(w/ attr)无术语|范围属性 '<[A-Za-z_:][\w:.-]* (?=\s) (?! (?:[^>"\']|(?>".*?"|\'.*?\'))*? (?<=\s) (?:term|range) \s*= ) \s+ (?:".*?"|\'.*?\'|[^>]*?)+ >' 任何标签(w/o attr)无术语|范围属性 '< (?: [A-Za-z_:][\w:.-]* (?=\s) (?! (?:[^>"\']|(?>".*?"|\'.*?\'))*? (?<=\s) (?:term|range) \s*= ) \s+ (?:".*?"|\'.*?\'|[^>]*?)+ | /?[A-Za-z_:][\w:.-]*\s*/? ) >' 更新 使用 (?>) 结构的替代方案 以下正则表达式适用于无“术语|范围”属性 标志 = (g)global 和 (s)dotall 带属性的跨度标签 链接:http://regexr.com?2vrjr 正则表达式:<span(?=\s)(?!(?:[^>"\']|"[^"]*"|\'[^\']*\')*?(?<=\s)(?:term|range)\s*=)(?!\s*/?>)\s+(?:".*?"|\'.*?\'|[^>]*?)+> 任何带有属性的标签 链接:http://regexr.com?2vrju 正则表达式:<[A-Za-z_:][\w:.-]*(?=\s)(?!(?:[^>"\']|"[^"]*"|\'[^\']*\')*?(?<=\s)(?:term|range)\s*=)(?!\s*/?>)\s+(?:".*?"|\'.*?\'|[^>]*?)+> 任何带有attr或wo/attr的标签 链接:http://regexr.com?2vrk1 正则表达式:<(?:[A-Za-z_:][\w:.-]*(?=\s)(?!(?:[^>"\']|"[^"]*"|\'[^\']*\')*?(?<=\s)(?:term|range)\s*=)(?!\s*/?>)\s+(?:".*?"|\'.*?\'|[^>]*?)+|/?[A-Za-z_:][\w:.-]*\s*/?)> '匹配除 term="occasionally" 之外的所有标签' 链接:http://regexr.com?2vrka <(?:[A-Za-z_:][\w:.-]*(?=\s)(?!(?:[^>"\']|"[^"]*"|\'[^\']*\')*?(?<=\s)term\s*=\s*(["'])\s*occasionally\s*\1)(?!\s*/?>)\s+(?:".*?"|\'.*?\'|[^>]*?)+|/?[A-Za-z_:][\w:.-]*\s*/?)> 我认为你应该使用 HTML 解析器来解决这个问题。创建自己的正则表达式是可能的,但肯定是错误的。想象一下你的代码包含这样的表达式 < span class = "a" >b< / span > 它也是有效的,但是考虑正则表达式中所有可能的空格和制表符并不容易,并且需要进行测试才能确保它按预期工作。 这将实现你想要的。它是为 Perl 程序编写的,格式可能会根据您使用的语言而有所不同 /(?! [^>]+ \b(?:item|range)= ) (<[a-z]+.*?>) /igx 下面的代码在 Perl 程序中演示了这种模式 use strict; use warnings; my $pattern = qr/ (?! [^>]+ \b(?:item|range)= ) (<[a-z]+.*?>) /ix; my $str = <<'END'; <span class="inline prewrap strong">DATE:</span> 12/01/10 <span class="inline prewrap strong">MR:</span> 1234567 <span class="inline prewrap strong">DOB:</span> 12/01/65 <span class="inline prewrap strong">HISTORY OF PRESENT ILLNESS:</span> Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum <span class="inline prewrap strong">MEDICATIONS:</span> <span term="Advil" range="true">Advil </span>and Ibuprofen. END print "$_\n" foreach $str =~ /$pattern/g; 输出 <span class="inline prewrap strong"> <span class="inline prewrap strong"> <span class="inline prewrap strong"> <span class="inline prewrap strong"> <span class="inline prewrap strong"> <\w+\s+(?!term).*?>(.*?)</.*?> 我认为这个正则表达式可以正常工作。 此正则表达式将选择任何 HTML 标签的样式属性。 <\s*\w*\s*style.*?> 您可以在 https://regex101.com 上查看
Google 表格 REGEXREPLACE - 根据最后一个字符排除匹配项
原文: 牙科基本药物盒 含有沙丁胺醇的药物盒;甘油三硝酸酯;胰高血糖素和肾上腺素 公式: =TRIM(REGEXREPLACE(G20,"([A-Z][\w\-]*[^;])",CHAR(10)...
我有一个带有数字的简单 CSV: 123,4,563,2334,32,7 我找不到使用索引号仅匹配与数字字段逐个字段匹配的第 n 个位置的方法。这可以用正则表达式解决吗
javascript中的正则表达式不仅允许字段中存在空格,还允许带有空格的字符串,并且还允许空字段
我需要正则表达式来不允许字段中仅包含空格(用户不应在字段中仅输入空格),但它可以允许完全空的字段,并且还可以允许带有
给定一个测试数据集如下: 身份证公司 0 1 xyz,有限公司。 1 2 华尔街英语(京) 2 3 詹姆斯(sh) 3 4 南 4 ...
我使用 Requestly 制定了一个正则表达式规则,每次我进入 YouTube 频道时,它都会将我重定向到视频部分。我制定的规则是这样的: /https\:\/\/www\.youtube\.com\/channel\/(.+)/ig
我正在尝试在 SQL 中编写正则表达式语句来搜索遵循以下格式的任何日期:2/4 位数字(+可选后缀)月份名称,2 或 4 位数字年份,例如 24 月 24 日。 日期和你...
解析正则表达式时出错,无效或不受支持的 Perl 语法:`(?!`
我正在使用此正则表达式验证电话号码和电子邮件,但我收到 Perl 语法错误,任何人都可以帮助我在这里使用什么 ^(?:(\d)(?! {2}))\d{4,15}$|([A-Za-z0-9]+@[A-za-z]+\.[A -Za-z]{2,3}) 我是
我正在尝试将非捕获组与 stringr 包中的 str_extract 函数一起使用。这是一个例子: 库(字符串) 文本<- "foo" str_extract(txt,"(?:f)(o+)") This returns "f...
我怎样才能让我的正则表达式只接受右括号(如果它已经匹配左括号)
我正在尝试制作一个仅接受列出格式的电话号码的正则表达式。但是,如果我用右括号结束第一个三位数组,而在开头没有左括号,那么...
正则表达式和 PHP - 将 src 属性与 img 标签隔离[重复]
使用 PHP,如何将 src 属性的内容与 $foo 隔离?我正在寻找的最终结果会给我“http://example.com/img/image.jpg” $foo = ' 使用 PHP,如何将 src 属性的内容与 $foo 隔离?我正在寻找的最终结果会给我“http://example.com/img/image.jpg” $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'; 如果您不想使用正则表达式(或任何非标准 PHP 组件),使用内置 DOMDocument 类的合理解决方案如下: <?php $doc = new DOMDocument(); $doc->loadHTML('<img src="http://example.com/img/image.jpg" ... />'); $imageTags = $doc->getElementsByTagName('img'); foreach($imageTags as $tag) { echo $tag->getAttribute('src'); } ?> 代码 <?php $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'; $array = array(); preg_match( '/src="([^"]*)"/i', $foo, $array ) ; print_r( $array[1] ) ; 输出 http://example.com/img/image.jpg 我得到了这个代码: $dom = new DOMDocument(); $dom->loadHTML($img); echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src'); 假设只有一张img :P // Create DOM from string $html = str_get_html('<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'); // echo the src attribute echo $html->find('img', 0)->src; http://simplehtmldom.sourceforge.net/ 我对此已经很晚了,但我有一个尚未提及的简单解决方案。使用 simplexml_load_string 加载它(如果您启用了 simplexml),然后通过 json_encode 和 json_decode 翻转它。 $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />'; $parsedFoo = json_decode(json_encode(simplexml_load_string($foo)), true); var_dump($parsedFoo['@attributes']['src']); // output: "http://example.com/img/image.jpg" $parsedFoo 出现为 array(1) { ["@attributes"]=> array(6) { ["class"]=> string(12) "foo bar test" ["title"]=> string(10) "test image" ["src"]=> string(32) "http://example.com/img/image.jpg" ["alt"]=> string(10) "test image" ["width"]=> string(3) "100" ["height"]=> string(3) "100" } } 我已经使用它来解析 XML 和 HTML 几个月了,而且效果非常好。我还没有遇到任何问题,尽管我还没有必要用它来解析一个大文件(我想使用 json_encode 和 json_decode 这样的输入越大,速度就越慢)。它很复杂,但它是迄今为止读取 HTML 属性的最简单方法。 这就是我最终所做的,尽管我不确定这有多有效: $imgsplit = explode('"',$data); foreach ($imgsplit as $item) { if (strpos($item, 'http') !== FALSE) { $image = $item; break; } } 您可以使用此功能解决此问题: 函数 getTextBetween($start, $end, $text) { $start_from = strpos($text, $start); $start_pos = $start_from + strlen($start); $end_pos = strpos($text, $end, $start_pos + 1); $subtext = substr($text, $start_pos, $end_pos); 返回$subtext; } $foo = ''; $img_src = getTextBetween('src="', '"', $foo); <?php $html = ' <img border="0" src="/images/image1.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image2.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image3.jpg" alt="Image" width="100" height="100" /> '; $get_Img_Src = '/<img[^>]*src=([\'"])(?<src>.+?)\1[^>]*>/i'; //for get img src path only... preg_match_all($get_Img_Src, $html, $result); if (!empty($result)) { echo $result['src'][0]; echo $result['src'][1]; } 还可以获取 img src 路径和替代文本 然后使用下面的正则表达式而不是上面的... ]*src=(['"])(?.+?) [^>]alt=(['"])(?.+?) > $get_Img_Src = '/<img[^>]*src=([\'"])(?<src>.+?)\1[^>]*alt=([\'"])(?<alt>.+?)\2*>/i'; //for get img src path & alt text also preg_match_all($get_Img_Src, $html, $result); if (!empty($result)) { echo $result['src'][0]; echo $result['src'][1]; echo $result['alt'][0]; echo $result['alt'][1]; } 我从这里想到了这个很棒的解决方案,PHP从href标签中提取链接 对于提取特定域的 URL,请尝试以下正则表达式 // for e.g. if you need to extract onlt urls of "test.com" // then you can do it as like below regex <a[^>]+href=([\'"])(?<href>(https?:\/\/)?test\.com.* ?)\1[^>]*> 附加信息 要获取包含base64编码数据的img src属性,您可以像下面这样做。你可以在here onlinephp.io上测试它 <?php $html = ' <p>test </p> <img border="0" src="/images/image1.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image2.jpg" alt="Image" width="100" height="100" /> <img border="0" src="/images/image3.jpg" alt="Image" width="100" height="100" /> <img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJUAAAAfCAYAAADuiY/xAAAAGXRF..." alt="Base64 Image 1" width="100" height="100" /> <img border="0" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAAAAAAAAAAAAEAAQAAAQAAAQEAAEAAAD/..." alt="Base64 Image 2" width="100" height="100" /> <h1>asas</h1> <img border="0" src="/images/image2.jpg" alt="Image" width="100" height="100" /> <img border="0" src="data:image/gif;base64,R0lGODlhPQBEAP8A..." alt="Base64 Image 3" width="100" height="100" /> <img border="0" src="http://test.com/images/image2.jpg" alt="Image" width="100" height="100" /> '; $get_Img_Src = '/<img[^>]*src=["\'](data:image\/[^;]+;base64[^"\']+)["\'][^>]*>/i'; // Regex to capture base64 image src preg_match_all($get_Img_Src, $html, $result); // Debugging step: print the entire result array echo "Full result:\n"; print_r($result); if (!empty($result[1])) { echo "Base64 matches found: " . count($result[1]) . PHP_EOL; // Access the base64 data in the first capture group, i.e. $result[1] foreach ($result[1] as $base64) { echo $base64 . PHP_EOL; // Echo each base64 encoded image string } } else { echo "No base64 images found." . PHP_EOL; } ?> 尝试这个模式: '/< \s* img [^\>]* src \s* = \s* [\""\']? ( [^\""\'\s>]* )/' 我使用 preg_match_all 来捕获 HTML 文档中的所有图像: preg_match_all("~<img.*src\s*=\s*[\"']([^\"']+)[\"'][^>]*>~i", $body, $matches); 这个允许更宽松的声明语法,带有空格和不同的引用类型。 正则表达式读起来像 (任何属性,如 style 或 border) src (可能的空格)=(可能的空格)(' 或 ")(任何非引号符号)(' 或 ")(任何直到>) (>) 假设我使用 $text ='<img src="blabla.jpg" alt="blabla" />'; 在 getTextBetween('src="','"',$text); 代码将返回: blabla.jpg" alt="blabla" 这是错误的,我们希望代码返回属性值引号之间的文本,即 attr =“value”。 所以 function getTextBetween($start, $end, $text) { // explode the start string $first_strip= end(explode($start,$text,2)); // explode the end string $final_strip = explode($end,$first_strip)[0]; return $final_strip; } 成功了! 尝试 getTextBetween('src="','"',$text); 将返回: blabla.jpg 还是谢谢你,因为你的解决方案让我了解了最终的解决方案。
如何在列中使用 JSON PrettyPrint 对 CSV 文件进行过滤和排序?
我有大量的 CSV 文件,应该对这些文件进行过滤并最终合并、排序并删除重复的行。 所以通常 sed 和 sort 没什么大不了的,我会用一些东西来实现这一点......
如何在Python中删除重复项并统一列表中值彼此非常接近的值?
我的Python列表如下: x1 = ['锁服务', '詹金斯服务', 'xyz-报告服务', 'ansible-服务', '港口服务', '版本服务', 'jira-服务', 'kubernetes-servi...
我怎样才能让我的javascript正则表达式只接受右括号(如果它已经匹配左括号)
我正在尝试制作一个仅接受列出格式的电话号码的正则表达式。但是,如果我用右括号结束第一个三位数组,而在开头没有左括号,那么...
正则表达式在数学方程中的所有下划线周围添加空格(`$ ... $`)
我试图匹配数学方程中包含的所有下划线,周围是数学分隔符 $,并在它们周围添加空格。 例如,在数学方程中: $(x_0, x_1, \点, x_n)$ 我想要...
这些是我的测试字符串: getObject('modSnippet') getObject($prefix . 'modSnippet' getObject($classPrefix . 'modSnippet' 我想匹配第一个,但不想匹配其他两个。 我已经尝试过这两种...
最佳正则表达式技巧是编写匹配 r1 但不匹配 r2 的正则表达式。他们给出的示例是匹配 Tarzan(和“Tarzan and Jane”)但不匹配“Tarzan”的正则表达式。去了之后
我正在尝试从下面的html中添加额外的食物条目,当我使用正则表达式时,它似乎只抓取每个部分的第一个食物条目,我想知道如何重复逻辑来抓取所有行
我有一个正则表达式来匹配字符串,例如: --D2CBA65440D --77094A27E09 --77094A27E --770 --77094A27E09-- 基本上,它匹配由一个或多个换行符或