文本提取是从非结构化和/或半结构化机器可读文档(文本)中自动提取结构化信息的任务。
我有一个需要匹配的字符串,它可以有多种格式: 5=33 5=14,21 5=34,76,5 5=12,97|4=2 5=35,22|4=31,53,71 5=98,32|7=21,3|8=44,11 我需要等号之间出现的数字...
我正在尝试使用 PHP preg_math 解析一个如下所示的字符串: 6.15608128 挪威克朗 我只想要第一部分(数字),而不是文本。我写了一个简单的正则表达式,例如 [0-9\.]+ 那工作...
我试图从不同的 eBay 页面提取里程值,但我陷入困境,因为页面有点不同,似乎有太多模式。因此我想知道你是否可以
解析 <embed>、<iframe>、<object>、<video>
这是我精心开发的插件的核心。虽然我在模式上遇到了一些麻烦.. 这是我精心开发的插件的核心。虽然我在模式上遇到了一些麻烦.. <?php $s = ' <embed type="application/x-shockwave-flash" id="single2" name="single2" src="http://api.realitylapse.com/player.swf" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" flashvars="file=http://cerium.realitylapse.com/stream/bea352a230ebd36b52dc27d874f41f5a/4e3c5eca/default/xxxxx/xxxxx-lq.mp4&plugins=ltas&ltas.cc=inhldvymihzxqln&provider=http" height="424" width="659"> <embed type="application/x-shockwave-flash" src="http://www.xxxxx.com/player9397/player.swf?" quality="high" allowfullscreen="true" allowscriptaccess="always" wmode="opaque" flashvars="provider=http&file=http://www.xxxxx.com/player9397/vb.php?id=TT175YivmF4y&type=video&backcolor=111111&frontcolor=cccccc&lightcolor=DE4949&stretching=fill" height="420" width="99%"> <embed src="http://www.megavideo.com/v/xxxxxx" type="application/x-shockwave-flash" allowfullscreen="true" width="100%" height="438"> '; $patterns = array(); //$patterns[] = '<embed[^>]+src=["\']+flashvars=["\'](.*?)["\']'; //Tried this one, but it only works with Cerium and without the pattern below it. $patterns[] = '<embed[^>]+src=["\'](.+?)["\']'; //Too greedy..? Without it, ones like megavideo wont be grabbed. $patterns[] = '<embed[^>]+data=["\'](.+?)["\']'; $patterns[] = '<embed[^>]+flashvars="(.+?)["\']'; //Possible problem.. $patterns[] = '<embed[^>]+file=(.+?)[&]'; // $patterns[] = '<iframe[^>]+src=["\'](.+?)["\']'; $patterns[] = '<iframe[^>]+data=["\'](.+?)["\']'; $patterns[] = '<object[^>]+src=["\'](.+?)["\']'; $patterns[] = '<object[^>]+data=["\'](.+?)["\']'; $patterns[] = '<video[^>]+src=["\'](.+?)["\']'; $patterns[] = '<video[^>]+data=["\'](.+?)["\']'; $patterns[] = '<video[^>]+file=(.+?)[&]'; $patterns = "#(?:" . implode("|", $patterns) . ")#si"; preg_match_all($patterns, ($s), $m); //var_dump($m); if (!empty($m[0])) { $edata = array(); foreach($m[0] as $match) { //Embeds: if (preg_match('#realitylapse.com/stream/(.+?)[&,"\']#si', $match, $id)) $edata[] = "<!--nextpage--><!--tab_title:CERIUM-->\n[cerium " . $id[1] . "]"; elseif (preg_match('#http&file=http://www.xxxx.com/player9397/vb.php?id=(.+?)[&,"\']#si', $match, $id)) $edata[] = "<!--nextpage--><!--tab_title:UNKNOWN-->\n[vb " . $id[1] . "]"; elseif (preg_match('#http://www.megavideo.com/v/(.+)[&"\']#si', $match, $id)) $edata[] = "<!--nextpage--><!--tab_title:MEGAVIDEO-->\n[megavideo " . $id[1] . "]"; } if (isset($edata[0])) { $embeds = implode("\n", ($edata)); print $embeds; } } ?> 仅输出: [megavideo P5X0UOA267fb79acd04cdb29a057c3fa0066573a1] 其他每个玩家都嵌入我的比赛。 flashvars 区域中的任何内容都不会。 ..而像大型视频嵌入这样的东西却可以。至于使用 HTML 解析器,很可能已经太晚了。 这些模式似乎是相互重叠的,充其量是猜测。 ..如果可能的话,目标是输出所有三场比赛。 -编辑- $patterns[] = '<embed[^>]+flashvars="(.*?)["\']';模式似乎毕竟拾取了两个嵌入.. [1]=> array(3) { [0]=> string(174) "file=http://cerium.realitylapse.com/stream/bea352a230ebd36b52dc27d874f41f5a/4e3c5eca/default/xxxxx/xxxxx-lq.mp4&plugins=ltas&ltas.cc=inhldvymihzxqln&provider=http" [1]=> string(177) "provider=http&file=http://www.xxxxx.com/player9397/vb.php?id=TT175YivmF4y&type=video&backcolor=111111&frontcolor=cccccc&lightcolor=DE4949&stretching=fill" [2]=> string(0) "" 这让我想知道是什么导致了这个问题...... -编辑- 没关系,我已经开始工作了! ..但不确定具体如何。 您的方法的问题是两个嵌入同时具有 src 属性和 flashvars 属性。在这两种情况下,src 都是第一个,因此将首先匹配。 根据源的结构(例如,src总是在flashvars之前吗?是否可能有其他属性),您可以使用多种方法: A)首先尝试最严格的正则表达式(即本例中的 flashvars),如果适合,则处理内容。否则尝试下一个(例如寻找 src)。 B) 仅当不包含 src 时,您才可以构建一个负环视正则表达式(将非常复杂且几乎不可读)来匹配 flashvars。 C) 解析 embed 标签内的所有属性并在循环中处理它们。
我已将 python 数据框列提取到列表中,然后将它们连接到字符串中 '3RDROCK、AARON、AARVI、ABCOTS.ST、ABINFRA、ABMINTLLTD、ACCORD、准确性、ACEINTEG、AGROPHOS、AHIMSA、AHLADA、AILIMITED、AIR...
我对R比较陌生。我有一个名为RN的字符变量,需要根据RN上的一些条件将其文本提取为2个变量[named_RN和general_RN]。这就是我们想要的...
我正在尝试创建一个正则表达式模式来获取以下 @ 和 , 之间的文本。例如,文本是这样的: 你好@bob,我的名字是@jack, 我想做的是得到
我正在尝试从提要中提取特定链接,其中所有内容都在一行上,并且存在多个链接。 我想要的在 标签中有 [link] 的内容。 这里...
获取 HTML 字符串中 <meta name="description"> 标签的内容属性值
我有以下字符串: $字符串=' 我有以下字符串: $string = '<meta name="Keywords" lang="fr" content="ecole commerce, apres bac, ecole management, ecole de management, écoles de commerce, école de management, classement ecole de commerce, ecole commerce paris, ecole superieure de commerce, concours ecole commerce, hec, esc, prepa, forum ecole commerce, avis ecole commerce" /><meta name="description" content="Tout pour s\'informer et échanger sur les écoles de commerce et de management, les concours, les classements, la prépa... Des témoignages et un forum pour faire le meilleur choix" /><meta name="robots" content="all" />'; 我尝试使用此正则表达式从中仅获取“描述”元: echo preg_replace('/(?:.*)name\="description" content\="(.*)"(?:.*)/i', '$1', $string); 但我得到的是: Tout pour s'informer et échanger sur les écoles de commerce et de management, les concours, les classements, la prépa... Des témoignages et un forum pour faire le meilleur choix" /><meta name="robots" content="all 那么,为什么要额外的" /><meta name="robots" content="all?! 您还应该将选项 U(Ungreedy)添加到您的正则表达式中。在这种情况下,它与字符串的最后一个 " 匹配,这就是您获得标签部分的原因。 preg_replace('/(?:.*)name\="description" content\="(.*)"(?:.*)/iU', '$1', $string); 请注意,您也可以将其替换为以下内容: preg_replace('/(?:.*)name\="description" content\="([^"]*)"/i', '$1', $string); [^"] 表示“任何不是双引号的内容”。最后一个 (?:.*) 也没用。 当您想要匹配某些内容而不是替换它时,我还喜欢将 preg_match 与第三个参数一起使用。基本上,我会做你想做的事: $var = array(); preg_match('/name\="description" content\="([^"]*)"/iU', $string, $var); 如果正则表达式找到匹配项,$var[1] 包含您的字符串。 不要使用贪婪的正则表达式,这会起作用: <?php echo preg_replace('/(?:.*)name\="description" content\="(.*?)"(?:.*)/i', '$1', $string); ?> 我用来避免贪婪正则表达式的一个习惯用法是使用与包围体相反的搜索模式(即 [^"],如果某些东西应该用引号引起来)。对于边缘情况更可靠: /content="([^"]*)"/i /(?:.)名称\="描述"内容\="-->(.)<--this is what matches the extra stuff that you don't want/did not expect to match. /(?:.)名称\="描述"内容\="(.)-->"<--this is what matches the quote after the word 'all' 您希望正则表达式尽快停止匹配而不是稍后,因此需要将其置于非贪婪的操作模式(其他海报已经说过)。 不建议使用正则表达式解析 HTML。 要保留多字节字符,您可以将文档的字符集声明为 UTF-8。 有几种方法可以做到这一点。 XPath 是一个特别优雅的工具,用于隔离目标元素并返回所需的属性值。 代码:(演示) $doc = new DOMDocument(); $doc->loadHTML( mb_encode_numericentity( $html, [0x80, 0x10FFFF, 0, ~0], 'UTF-8' ) ); $xpath = new DOMXPath($doc); echo $xpath->evaluate('string(//meta[@name="description"]/@content)'); 输出: Tout pour s'informer et échanger sur les écoles de commerce et de management, les concours, les classements, la prépa... Des témoignages et un forum pour faire le meilleur choix
从格式为“/d-m-Y/H:i/”或“/d-m-Y/”的字符串中提取日期和时间值
解释我的问题的最好方法就是向您展示。 输入字符串: /04-11-2010/12:45/ 获取日期和时间部分的正则表达式: preg_match('@/(\d\d)-(\d\d)-(\d\d\d\d)/(\d\d):(\d\d)/@', ...
我有以下字符串(示例): 加载器[data-prop data-attr =“值”] 可以有 1 - n 个属性。我想提取每个属性。 (数据属性,数据属性=“值”)。我尝试...
/任意字符串/任意字符串/任意数字 用这个正则表达式: /(\w+).(\w+).(\d+)/ 它有效,但我需要这个网址: /特定字符串/任意字符串/任意字符串/任意数字 而且我不知道如何获得它。
我有以下格式的 HTML 文本: 极光 我有以下格式的 HTML 文本: <option value="http://www.torontoairportlimoflatrate.com/aurora-limousine-service.html">Aurora</option> <option value="http://www.torontoairportlimoflatrate.com/alexandria-limousine-service.html">Alexandria</option> 我已经尝试过: preg_match_all("#>\w*#",$data,$result); 返回结果如下 Array ( [0] => Array ( [0] => >Ajax [1] => > [2] => >Aurora [3] => > [4] => >Alexandria [5] => > [6] => >Alliston 我只想要一个选项文本值(城市)的平面数组 [0] => Ajax [1] => Aurora ... 如果您不想使用 HTML 解析器,可以使用正则表达式来完成,但请记住,您可能需要根据将来收到的输入内容来修改它。对于您的具体问题,这是一个可以完成这项工作的正则表达式: <?php preg_match_all('/<option\svalue=\"([a-zA-Z0-9-_.\/:]+)\">([a-zA-Z\s]+)<\/option>/', $data, $result); var_dump($result[2]); 注: 如果你想匹配每个 url,你应该用更强大的 url 匹配正则表达式替换 ([a-zA-Z0-9-_.\/:]+)。您也可以在 StackOverflow 上找到some,但对我来说这是个人品味问题。 使用合法的 DOM 解析器解析有效的 HTML,以享受可靠的过程和直观/富有表现力的语法。 getElementsByTagName() 可能是您定位所有 <option> 标签所需的全部。 代码:(演示) $html = <<<HTML <select> <option value="http://www.torontoairportlimoflatrate.com/aurora-limousine-service.html">Aurora</option> <option value="http://www.torontoairportlimoflatrate.com/alexandria-limousine-service.html">Alexandria</option> </select> HTML; $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML($html); $options = []; foreach ($dom->getElementsByTagName('option') as $option) { $options[] = $option->nodeValue; } var_export($options); 输出: array ( 0 => 'Aurora', 1 => 'Alexandria', )
我有一个关于reg表达式的奇怪问题。 我试图在这样的字符串中取出产品的名称: #T55.08 #J60.91 #M1/1 #YT102/0///领带#G #T55.08 #J60.91 #...
从 HTML 文档中提取具有指定类的 <div> 元素及其内容
... PHP中如何匹配里面(包括)的html? 我需要一个可以处理嵌套情况的正则表达式解决方案。 <div class="begin">...</div> 如何在PHP中匹配<div class="begin">里面的html(包括)? 我需要一个可以处理嵌套情况的正则表达式解决方案。 使用 DOM 和 DOMXPath 而不是正则表达式,你会为此感谢我的: // something useful: function dumpDomNode ($node) { $temp = new DOMDocument(); $temp->appendChild($node,true); return $temp->saveHTML(); } $dom = new DOMDocument(); $dom->loadHTML($html_string); $xpath-> new DOMXpath($dom); $elements = $xpath->query("*/div/[@class='begin']"); foreach ($elements as $el) { echo dumpDomNode($el); // <-- or do something more useful with it } 用正则表达式尝试这个将会引导你走向疯狂...... 这个总结得很好。 简而言之,不要使用正则表达式来解析 HTML。相反,请查看 DOM 类,尤其是 DOMDocument::loadHTML 这是你的正则表达式: preg_match('/<div class=\"begin\">.*<\/div>/simU', $string, $matches); 但是: RegEx 不知道 XML/HTML 元素是什么。对他们来说,HTML 只是一个字符串。这就是为什么其他人是对的。正则表达式不适用于解析DOM。它们用于查找字符串模式。 我提供了正则表达式,因为您不打算解析整个 HTML 页面,而只是从中获取一段定义的文本,在这种情况下,可以使用正则表达式。 如果 DIV 内有嵌套 DIV,则正则表达式将无法按预期工作。如果是这种情况,请不要使用正则表达式。使用其他解决方案之一,因为这样你需要 DOM 解析,而不是字符串匹配。 要查找具有或多或少明确定义的开头和结尾的字符串,请考虑使用常规字符串函数,因为它们通常更快。 // Create DOM from URL $html = file_get_html('http://example.org/'); echo $html->find('div.begin', 0)->outertext; http://simplehtmldom.sourceforge.net/manual.htm 这是使用字符串方法的一种方法 $str= <<<A blah <div class="begin"> blah blah blah blah blah </div> blah A; $s = explode("</div>",$str); foreach($s as $k=>$v){ $m=strpos($v,'<div class="begin">'); if($m !==FALSE){ echo substr("$v" ,$m); } } 输出 $ php test.php <div class="begin"> blah blah blah blah blah
从亚马逊搜索结果 HTML 中的合格超链接中抓取 href 值
我一直在尝试构建一个简单的抓取工具,它需要一个关键字,然后去亚马逊并在搜索框中输入关键字,然后仅抓取主要结果。 问题是正则表达式我...
我想从每个播放列表中抓取玩家数量,只是值而不是逗号。 贵族地图包(652 名玩家) 以上是...
如何从 $_SERVER['php_self'] 中找到页面标题的名称? 假设 $_SERVER 显示我的页面如下:/application/mysite/signup.php。 如何选择注册页面标题?
如何使用正则表达式使用 preg_replace 删除给定字符之前的任何内容和给定字符之后的任何内容?当然,这可以通过许多其他方式来完成,例如爆炸和
我有一个像下面这样的字符串: “......地图搜索”),'52.486683,-4.044363',选项......” 我想从字符串中检索 2 个数字(长和纬度) - 我不介意是否