PHP编程语言的正则表达式模式匹配函数
我需要验证潜在的多字节输入字符串是否具有 5 个或更多字符,并且只能包含字母、数字、点和正斜杠。 S7åckÖv3rF/0w:通过 ääää : 失败 55555:爸...
我希望用户能够输入A-Z的每个字符和0-9的每个数字,但我不希望他们输入“特殊字符”。 代码: if (preg_match("/^[a-zA-Z0-9]$/&quo...
我有一个需要匹配的字符串,它可以有多种格式: 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\.]+ 那工作...
我试图在 PHP 中放置一个正则表达式匹配来查找字符串是否包含除以下字符之外的任何其他无效字符, ~!@#$%^&*()_-+=\}]{[::'"/>.<, alpha, spa...
解析 <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 标签内的所有属性并在循环中处理它们。
我在我的网站上创建了一个联系表单,并希望验证电话号码是否完全由数字组成,如果输入了一个,则包括一个前导零。 我有以下的...
我有以下字符串(示例): 加载器[data-prop data-attr =“值”] 可以有 1 - n 个属性。我想提取每个属性。 (数据属性,数据属性=“值”)。我尝试...
我有这3个字符串: $string = "他的"; $str1 = "嗨"; $str2 =“s”; 所以我想做的是一个正则表达式来查找 hi 并替换它。但!如果字符串中有 s...
我尝试从德语格式的字符串中获取电话号码。但我没有让它完全运行。输入文本是一个完整的 HTML 页面,其中包含大量内容,而不仅仅是数字。 可能的格式: (06442) 3...
我正在尝试匹配字符串,但它正在进入最后一个 else 循环。您能提供任何帮助吗? $cstg = "真<\/result>"; if (preg_match("/True<\/result>/...
我在使用一个正则表达式时遇到问题,因此输入字符串看起来像 你好世界和我或你 我想匹配所有从你好到最近/最近的吵闹的 w...
我将有一个表,每个表可能有 1 - 6 个对投票的引用,我需要的是一个正则表达式来获取投票数量,我的表看起来像这样: &...
转义字符串中的纯文本字符,其中包含要传递到日期呈现函数的日期格式表达式
我试图转义字符串中包含在 {{ 和 }} 中的每个字符,因此: d-m-Y {{警告}} 就变成这样了: d-m-Y \{\{\w \我 \G\}\} 我正在尝试使用 preg_replace 来实现它: 美元...
http://regexr.com?35hk2 上面的网站显示了正确的正则表达式,但是当我使用 PHP 执行此操作时,它没有显示某些名称,例如 JJ5x5 的白礼帽 这是 PHP : http://regexr.com?35hk2 上面的网站显示了正确的正则表达式,但是当我使用 PHP 执行此操作时,它没有显示某些名称,例如 JJ5x5’s White Top Hat 这是 PHP : <?php function newEcho($Value){ echo $Value . "<br>"; }; function cURLAuto($URL){ $Channel = curl_init(); curl_setopt($Channel, CURLOPT_URL, $URL); curl_setopt($Channel, CURLOPT_RETURNTRANSFER, 1); return curl_exec($Channel); }; function autoMatchAll($String,$Pattern){ $Found = array(); $Match = preg_match_all($Pattern,$String,$Found); return $Found; }; function replaceMatch($String,$Pattern,$Subject){ return str_replace($Pattern,$Subject,$String); }; $Count = 0; $Output = cURLAuto("www.roblox.com/catalog/json?Subcategory=2&SortType=0&SortAggregation=3&SortCurrency=0&LegendExpanded=true&Category=2&PageNumber=1"); $AssetId = autoMatchAll($Output,'/"AssetId":[\d]+/'); $Name = autoMatchAll($Output,'/"Name":"[\w\s\d\-' . "\'" . ']+"/'); foreach($AssetId[0] as $Value){ newEcho(replaceMatch($Value,'"AssetId":',"") . ":" . replaceMatch(replaceMatch($Name[0][$Count],'"Name":"',""),'"',"")); $Count++; }; echo $Output ?> $Name是我在正则表达式方面遇到问题的地方,因为它在显示运行代码时仅显示一些名称。 $Name 的正则表达式是 /"Name":"[\w\s\d\-\']+"/ 但由于事实上我不能使用 ' 或 " 作为字符串,所以我必须制作它 '/"Name":"[\w\s\d\-' . "\'" . "]+/" 但是你能帮我解决这个问题吗,因为我想解决这个问题。 我敢打赌,'中的JJ5x5's White Top Hat是“印刷撇号”,’(Unicode:U+2019 "RIGHT SINGLE QUOTATION MARK",Windows代码页1252:0x92,PHP中的UTF-8:"\xE2\x80\x99")。区分印刷撇号/引号和 ASCII 单引号:如果它直接向下(在原始字符串中!),则它是 ASCII 单引号,如果不是,则它是印刷撇号/引号。 如果您只想匹配直到结束双引号的任何内容,请使用 '/"Name":"[^"]+"/',除非您可以在名称中转义双引号,在这种情况下,正则表达式将变为(在 PHP 中)'/"Name":"(?:[^\\\\"]|\\\\[\\\\"])+"/'(将其他可能的转义添加到最后一堂课)。 顺便说一句,您不需要将正则表达式的字符串拆分为不同的分隔字符串(您所要做的就是转义当前分隔符),并且,如果这样做,则不需要转义 a 中的单引号用双引号分隔的字符串。 试试这个: '/"Name":"(.*?)"/' .
字符串可能在大括号中包含非数字,需要将其删除。输入也可以是多行,例如: 输入: #(1437) #{19} (917) (1437) # {19} (1437) [1449] [2474] [2098] [1351] [508...
验证字符串长度为 10 位数字,前 5 位为相同数字,后 5 位为相同数字
我正在尝试将此 Java 移植到 PHP: 字符串_值 = '1111122222'; if (_value.matches("(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{ 5}){2}")) { // 检查前 5 个相同的数字...
没有模式分隔符的正则表达式不会使用 preg_match() 发出警告
$first = "."; $最后=“a”; $middle=“testing-123.test”; if (preg_match("[a-zA-Z0-9]", $first)){ echo '第一次返回有效。'; } if (preg_match("[a-zA-Z0-9.-]", $middle)){ echo '中间返回v...
我试图转义字符串中包含在 {{ 和 }} 中的每个字符,因此: d-m-Y {{警告}} 就变成这样了: d-m-Y \{\{\w \我 \G\}\} 我正在尝试使用 preg_replace 来实现它: ...
我需要一个正则表达式来验证文件系统上的文件名。 有效文件名的示例是 Tapa_newcougar_org.png Tapa_兰博基尼-talk_com.png Tapa_clubfrontier_org.png 背后的逻辑