preg-match-all 相关问题

使用PCRE模式执行全局正则表达式匹配的PHP函数。

挑战者流媒体-ITA Completo

[AltaDefinizione]] 挑战者 STREAMING-ITA Completo。持续时间:140 分钟类型 : 动作、奇幻、电视电影。斯特尔:泰勒·波西、克里斯托·里德、霍兰·罗登、泰勒·霍奇林。导演:迈克·埃利奥...

回答 1 投票 0

Preg匹配两个短语中的任何一个,但不匹配第三个

我有一个链接列表(a 中还有一些 svg 图标 - 它使我的模式更加复杂,这就是我提到这一点的原因),我想抓住两个特定的链接。 所以,如果这是主题...

回答 2 投票 0

从 txt 文件获取唯一 ID 并将其附加到 csv 文件

我正在尝试通过 preg_match_all() 将 data.txt 中的多行填充到 data.csv 中的单行或列。它需要位于单个数组中,因为我只需要唯一的数字(或任何其他选项......

回答 2 投票 0

fputcsv,多个数组放入一行或一列

我试图找到答案,但没有成功,请帮忙。 我正在尝试通过 preg_match 将 data.txt 中的多行填充到 data.csv 中的单行或列。它需要在一个单一的...

回答 2 投票 0

preg_match_all() 仅返回单行中的最后一个匹配项,但返回多行字符串中的所有匹配项[重复]

我尝试使用 preg_match_all() 函数查找文本中所有出现的子字符串: 这个 我尝试使用 preg_match_all() 函数查找文本中所有出现的子字符串: <?php $str = '<p>this <a href="https://api.slack.com/apps/" target="_blank">link</a> and <a href="https://www.google.com" target="_blank">link 2</a></p>'; $reg = '/<a.*href="([^"]+)"[^>]+>(.+)<\/a>/'; preg_match_all($reg, $str, $m); print_r($m); 但是上面的代码只返回最后一个链接:run PHP online 当我将源文本拆分为行时,相同的代码返回所有匹配项: <?php $str = '<p>this <a href="https://api.slack.com/apps/" target="_blank">link</a> and the <a href="https://www.google.com" target="_blank">link 2</a></p>'; $reg = '/<a.*href="([^"]+)"[^>]+>(.+)<\/a>/'; preg_match_all($reg, $str, $m); print_r($m); 这里是 PHP 沙箱 问题出在你的正则表达式上。您可以限制字符: /<a\s*href="([^"]+)"[^>]+>([^<]+)<\/a>/ 或者使用惰性匹配: /<a.*?href="([^"]+)"[^>]+>(.+?)<\/a>/

回答 1 投票 0

php - 如何从 url 获取元标记 [重复]

我想从网址获取元标签。如果存在数据属性值,则无法正确提取。如何更改正则表达式? HTML 代码 1. 我想从网址获取元标签。如果存在数据属性值,则无法正确提取。如何更改正则表达式? HTML 代码 1. <meta property="og:title" content="111"> 2. <meta data-one="true" property="og:description" content="222"> 3. <meta data-two="true" property="og:image" content="333"> 4. <meta data-three="true" data-another="true" property="og:url" content="444"> PHP 代码 preg_match_all('~<\s*meta\s*property="(og:[^"]+)"\s*content="([^"]*)~i', $html, $matches); 结果 Array( [0] => og:title ) 希望结果 Array( [0] => og:title, [1] => og:description, [2] => og:image, [3] => og:url ) 问题在于第二个和第三个\s*,它表示匹配零个或多个空格。但是,在第二种情况下,您想要匹配 \b.*\b、单词边界(meta 的结尾),然后是任何内容,然后是新的单词边界(property 的开头)。对于第三种情况,需要 \s.*\b,因为 " 不是单词边界,所以你的固定正则表达式是: preg_match_all('~<\s*meta\b.*\bproperty="(og:[^"]+)"\s.*\bcontent="([^"]*)~i', $html, $matches); 请参阅此处的示例。

回答 1 投票 0

使用php获取字符串中的第一个图像

我正在尝试从我的每篇帖子中获取第一张图片。如果我只有一张图像,下面的代码效果很好。但如果我有多个,它会给我一个图像,但并不总是第一个。 我真的...

回答 4 投票 0

使用 preg_match_all 更改所有表标签

我想将字符串中的所有标签更改为一个集合,例如[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 );

回答 1 投票 0

PHP 获取两个字符串之间的内容

我正在尝试从以下示例字符串中提取 \" 之间的字符串: xxxx\"Text Here\";\"Text Here2\"yyyy。也就是说,我想获取两个字符串:Text Here 和 T。 ..

回答 1 投票 0

提取 AWS 授权标头字符串的重要部分

我的输入字符串: AWS-HMAC-SHA256 凭证=eyJhbGciOiJIUzI1NiIsIngtc3MiOjEy/20160911/cn/user-service/request,SignedHeaders=主机;x-aws-date,签名=

回答 2 投票 0

PHP preg_match_all 在字符串中找不到值

我有一个字符串,我想找到两个出现的地方。 $字符串 = "xxxyyy"; preg_match_all('/xxxy|xyyy/', $string, $matches, PREG_OFFSET_CAPTURE); print_r($matches[0]); 这就是我...

回答 1 投票 0

替换 <img> 标签上的空 alt 标签

我想替换字符串中图像上的空 alt 标签。我有一个字符串,其中包含窗帘页的所有文本。文字里也有图片,而且很多都是空标签(老d……

回答 5 投票 0

隔离字符串中的所有单词以及每个单词前面的(多字节安全)字符数

我想使用 preg_split() 及其 PREG_SPLIT_OFFSET_CAPTURE 选项来捕获单词及其在原始字符串中开始的索引。 但是我的字符串包含多字节字符...

回答 4 投票 0

在 PHP 中使用 preg_match 时出现“未知修饰符‘g’ in...”?

这是我尝试使用的正则表达式: /^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim 我在这个网站上找到了它,当我在那里尝试时效果非常好。但一旦我将它放入我的代码中,我...

回答 2 投票 0

从文本中获取以关键字数组之一开头的子字符串,并且子字符串不得包含第二个关键字

我想编写一些接受两个参数 $text 和 $keys 的函数。 Keys 表示带有键的数组。 在输出中,我们需要获取一个数组,其中的键将是传递给函数的键...

回答 2 投票 0

正则表达式 | PHP 捕获 json 字符串中的每个非法双引号

给定以下 json 字符串:{"key":"val"ue","other":"invalid ""quo"te"} 我想捕获值内的每个非法双引号...

回答 1 投票 0

获取括号之间的所有子字符串

我想提取两个字符(括号)之间的所有字符串。 $string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)"; 期望的输出: ['布洛普','布洛普','砰'] 我不

回答 5 投票 0

使用正则表达式匹配解析的 SSL 证书的主题元素

我正在使用 openssl_x509_parse 解析 SSL 证书。 数组的 name 元素生成以下类型字符串,其中包含证书主题信息。 [名称] = /序列号=

回答 1 投票 0

端线锚点,$,行为不符合预期

我有这个代码来处理 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 ,无论您使用空格还是制表符,也无论您的行结尾是什么。

回答 2 投票 0

奇怪的 preg_match_all() 行为

我有这个代码来处理配置文件: 我有这个代码来处理配置文件: <?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 在本地期望的换行符。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.