使用PCRE模式执行全局正则表达式匹配的PHP函数。
我正在尝试从我的每篇帖子中获取第一张图片。如果我只有一张图像,下面的代码效果很好。但如果我有多个,它会给我一个图像,但并不总是第一个。 我真的...
我想将字符串中的所有标签更改为一个集合,例如[table1],[table2]等。 例如, 你好 我想将字符串中的所有标签更改为[table1],[table2]等集合。 例如, Hello there <table class="table1"><tr><td></td></tr></table> Some text here <table class="table2"><tr><td></td></tr></table> Some text here <table class="table3"><tr><td></td></tr></table> 致: Hello there [table1] Some text here [table2] Some text here [table3] 使用 preg_match_all("@\<table (\s\S+)@s", $table_in_string, $match); foreach ($match[1] as $key => $k) { } 我这里的正则表达式好像不起作用。 pregl_replace示例: $text = preg_replace( '/<table.*?class="(table\d+)".*?<\/table>/s', '[$1]', $text );
我正在尝试从以下示例字符串中提取 \" 之间的字符串: xxxx\"Text Here\";\"Text Here2\"yyyy。也就是说,我想获取两个字符串:Text Here 和 T。 ..
我的输入字符串: AWS-HMAC-SHA256 凭证=eyJhbGciOiJIUzI1NiIsIngtc3MiOjEy/20160911/cn/user-service/request,SignedHeaders=主机;x-aws-date,签名=
我有一个字符串,我想找到两个出现的地方。 $字符串 = "xxxyyy"; preg_match_all('/xxxy|xyyy/', $string, $matches, PREG_OFFSET_CAPTURE); print_r($matches[0]); 这就是我...
我想替换字符串中图像上的空 alt 标签。我有一个字符串,其中包含窗帘页的所有文本。文字里也有图片,而且很多都是空标签(老d……
隔离字符串中的所有单词以及每个单词前面的(多字节安全)字符数
我想使用 preg_split() 及其 PREG_SPLIT_OFFSET_CAPTURE 选项来捕获单词及其在原始字符串中开始的索引。 但是我的字符串包含多字节字符...
在 PHP 中使用 preg_match 时出现“未知修饰符‘g’ in...”?
这是我尝试使用的正则表达式: /^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim 我在这个网站上找到了它,当我在那里尝试时效果非常好。但一旦我将它放入我的代码中,我...
从文本中获取以关键字数组之一开头的子字符串,并且子字符串不得包含第二个关键字
我想编写一些接受两个参数 $text 和 $keys 的函数。 Keys 表示带有键的数组。 在输出中,我们需要获取一个数组,其中的键将是传递给函数的键...
正则表达式 | PHP 捕获 json 字符串中的每个非法双引号
给定以下 json 字符串:{"key":"val"ue","other":"invalid ""quo"te"} 我想捕获值内的每个非法双引号...
我想提取两个字符(括号)之间的所有字符串。 $string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)"; 期望的输出: ['布洛普','布洛普','砰'] 我不
我正在使用 openssl_x509_parse 解析 SSL 证书。 数组的 name 元素生成以下类型字符串,其中包含证书主题信息。 [名称] = /序列号=
我有这个代码来处理 Windows 中的配置文件: 我有这个代码来处理 Windows 中的配置文件: <?php $config = '[log] log_writers[] = "file" log_writers[] = "screen" [General] maintenance_mode = 0 enable_browser_archiving_triggering = 0 enable_sql_optimize_queries = 0 force_ssl = 1'; echo preg_match_all( '/^maintenance_mode[ \t]*=[ \t]*\d$/m', $config ); 回波显示 0 https://onlinephp.io/c/51407 将正则表达式更新为: echo preg_match_all( '/^maintenance_mode[ \t]*=[ \t]*\d\s$/m', $config ); 达到预期效果1 为什么?? 我什至在 regex101 中验证了我的理智 https://regex101.com/r/CIxCkN/1 本地测试环境: RHEL 7 PHP 5.6.25 PCRE v8.32 2012-11-30 和 Windows Server 2022 PHP 8.2.7 PCRE v10.40 2022-04-14 每个评论请求: var_dump(base64_encode($config)); 字符串(240)“W2xvZ10NCmxvZ193cml0ZXJzW10gPSAiZmlsZSINCmxvZ193cml0ZXJzW10gPSAic2NyZWVuIg0KDQpbR2VuZXJhbF0NCm1haW50ZW5hbmNlX21vZGUgPSAwDQplbmFib GVfYnJvd3Nlcl9hcmNoaXZpbmdfdHJpZ2dlcmluZyA9IDANCmVuYWJsZV9zcWxfb3B0aW1pemVfcXVlcmllcyA9IDANCmZvcmNlX3NzbCA9IDE=" var_dump(bin2hex($config)); 字符串(358)“5b6c6f675d0d0a6c6f675f777269746572735b5d203d202266696c65220d0a6c6f675f777269746572735b5d203d202273637265656e220 d0a0d0a5b47656e6572616c5d0d0a6d61696e74656e616e63655f6d6f6465203d20300d0a656e61626c655f62726f777365725f617263686976696e675f 74726967676572696e67203d20300d0a656e61626c655f73716c5f6f7074696d697a655f71756572696573203d20300d0a666f7263655f73736c203d203 1" 一个答案是您的字符串(或通常的脚本)具有 Windows 行结尾。 在多行模式下,\d$仅匹配数字后跟一个立即换行符(由PCRE的编译时设置确定),如果其中隐藏了\r,则可能无法工作。 在正则表达式末尾添加 \s 将匹配所有行结束字符,这解释了为什么这对受影响的测试环境有帮助。 对于修复(除了您已经找到的 \s 添加之外),PCRE 允许您使用字符串开头的修饰符来调整哪些字符匹配为换行符,例如(*ANYCRLF): // Force Windows line-ending <?php $test = "foo\r\nbar"; var_dump(preg_match_all('/^foo$/m', $test)); var_dump(preg_match_all('/(*ANYCRLF)^foo$/m', $test)); int(0) 整数(1) 请参阅 https://3v4l.org/vOUgM 进行演示,并参阅 PCRE 文档的 换行约定部分了解一些详细信息。 或者,只需在字符串中使用 PCRE 在本地期望的换行符。 更一般地说,如果您实际上正在尝试解析问题中的字符串/文件,那么 array_key_exists 和 parse_ini_string/parse_ini_file 的组合将使一切变得更加清晰。 你的配置文件确实有windows-newlines \r\n,你的bin2hex 5b6c6f675d0d0a的第一部分翻译成[log]\r\n,这意味着@iainn的预感是正确的:) 尽管如此,我还是会把正则表达式写成 '/^维护模式\s*=\s*(\d)\s*$/m' 这样会更健壮,所以写成这样也没关系 maintenance_mode=5 或 maintenance_mode =5 或 maintenance_mode= 5 或 maintenance_mode = 5 ,无论您使用空格还是制表符,也无论您的行结尾是什么。
我有这个代码来处理配置文件: 我有这个代码来处理配置文件: <?php $config = '[log] log_writers[] = "file" log_writers[] = "screen" [General] maintenance_mode = 0 enable_browser_archiving_triggering = 0 enable_sql_optimize_queries = 0 force_ssl = 1'; echo preg_match_all( '/^maintenance_mode[ \t]*=[ \t]*\d$/m', $config ); 回波显示 0 https://onlinephp.io/c/51407 将正则表达式更新为: echo preg_match_all( '/^maintenance_mode[ \t]*=[ \t]*\d\s$/m', $config ); 达到预期效果1 为什么?? 我什至在 regex101 中验证了我的理智 https://regex101.com/r/CIxCkN/1 本地测试环境: RHEL 7 PHP 5.6.25 PCRE v8.32 2012-11-30 和 Windows Server 2022 PHP 8.2.7 PCRE v10.40 2022-04-14 一个答案是您的字符串(或通常的脚本)具有 Windows 行结尾。 在多行模式下,\d$仅匹配数字后跟一个立即换行符(由PCRE的编译时设置确定),如果其中隐藏了\r,则可能无法工作。 在正则表达式末尾添加 \s 将匹配所有行结束字符,这解释了为什么这对受影响的测试环境有帮助。 对于修复(除了您已经找到的 \s 添加之外),PCRE 允许您使用字符串开头的修饰符来调整哪些字符匹配为换行符,例如(*ANYCRLF): // Force Windows line-ending <?php $test = "foo\r\nbar"; var_dump(preg_match_all('/^foo$/m', $test)); var_dump(preg_match_all('/(*ANYCRLF)^foo$/m', $test)); int(0) 整数(1) 请参阅 https://3v4l.org/vOUgM 进行演示,并参阅 PCRE 文档的 换行约定部分了解一些详细信息。 或者,只需在字符串中使用 PCRE 在本地期望的换行符。
如何使用 cURL 和 preg_match_all 在源列表中抓取多行
嘿,我正在尝试抓取网站上的特定内容,就像这样 嘿,我正在尝试抓取网站上的特定内容,就像这样 <td><a href="javascript:void(0)" class="rankRow" data-rankkey="25"> Averages </a> </td> <td class="page_speed_602217763"> 82.84 </td> </tr> 我试图获取数字 82,84,其中 page_speed_** 数字变化,并且与源列表的其余部分不同的常量是文本“平均值” 我尝试过使用 preg_match_all 但似乎无法搜索超过一行以及中间的任何内容。 我使用的代码如下 <?php $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $Player1Link); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $curlresult = curl_exec($curl); preg_match_all('!data-rankkey="25">Averages</a></td><td class="(\d.*)</tr>!', $curlresult, $matches); print_r($matches); $P1AvgHigh = $matches[0][3]; echo "<br>"; echo $P1AvgHigh; curl_close($curl); ?> 提前致谢 首先,您的类声明不完整,并且您错过了第二个 td 的内容...也许这是您的代码的不完整副本?您还需要考虑每个元素之间和内部的空白。 这是我的正则表达式,它看起来可以工作(但可能需要根据您的精确要求和内容中可能的值进行调整)... data-rankkey="25">[\s]*Averages[\s]*<\/a>[\s]*<\/td>[\s]*<td class="page_speed_([\d]*)">[\s]*([\d]*.[\d]*)[\s]*</td>[\s]*<\/tr> 我已经转义了正斜杠,这对你来说可能不需要。 供将来参考https://www.regexpal.com/是一个玩正则表达式的好工具
我正在尝试完成这项工作,但我不能: $str = "123"; $匹配=数组(); preg_match_all("(?<= 我正在尝试完成这项工作,但我做不到: $str = "<html>1</html><html>2</html><html>3</html>"; $matches = array(); preg_match_all("(?<=<html>)(.*?)(?=</html>)", $str, $matches); foreach ($matches as $d) { echo $d; } 我做错了什么?输出必须是: 123 这应该对你有用: $str = "<html>1</html><html>2</html><html>3</html>"; preg_match_all("~(?<=<html>).*?(?=</html>)~", $str, $matches); foreach ($matches[0] as $d) { echo $d; } 输出: 123 变化是: 在~函数模式中使用缺失的正则表达式分隔符preg_match_all 删除捕获组,因为您已经在使用前瞻和后视,因此整个匹配可以用于进一步处理 在 $matches[0] 循环中使用 foreach 而不是 $matches 在$matches调用之前不需要声明/初始化preg_match_all 您需要添加分隔符(我已经使用了!)并且您可以跳过前瞻/后视。只需围绕您想要的数字创建一个捕获组。没有其他的。 然后在第二个matches元素中查找具有各个值的数组。 例子: preg_match_all("!<html>(.*?)</html>!", $str, $matches); foreach ($matches[1] as $d) { echo $d; }
我有以下字符串: SEDCVBNT S800BG09 7GFHFGD6H 324235346 RHGF7U S8-00BG/09 7687678 和以下正则表达式: preg_match_all('/ (?=.+[0-9])(?=.+[A-Z])[A-Z0-9-\/]{4,20}/i', $string, $m. ..
如何使用 href url、数据属性和文本组来预匹配整个 <a> 标签
在给定的 html 内容中,我需要 preg_match_all 标签与 href url、文本和数据名称属性组。 我将分享我卡住的当前工作场所。谁能帮我...
使用 PHP v8 preg_match_all($Matches) 函数的“匹配”参数,我需要匹配文字文本和分隔标记的列表。 $x = preg_match_all($Regex, $Template, $Matches,
我有一段代码(不是我写的)在尝试调用 pre_match_all 函数时出现错误: $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?( !?[\w-:]+)(?:([!...