gpt4 book ai didi

php - 正则表达式问题 - 如果我知道如何正确提问,我也会正确地知道答案吗?

转载 作者:行者123 更新时间:2023-12-04 06:32:47 26 4
gpt4 key购买 nike

所以基本上我的正则表达式没有像我期望的那样工作,我不知道为什么。

我在一个相当规范的环境中工作,所以这应该不是什么大问题——所有的 html 标签都是由脚本生成的,并遵循以下模式:仅 li , ph(3-6)标签存在。所有文本都在标签之间,标签之间没有空格。

我“需要”写一些东西来包围 li s 与 ul标签。这是我得到的:

preg_replace('#(<li>[^<p|<h]+</li>)(?!<li>)#', '<ul>$1</ul>', $html)

但是它只匹配最后一个 li出于某种原因配对。谁能告诉我为什么......拜托?

最佳答案

[^<p|<h]不会做你期望的。它匹配不是任何字符 <p|h 的单个字符.如果您的 HTML 真的像您说的那样受限制,并且您不能拥有 <li>嵌套在另一个 <li> ,那么以下应该工作:

preg_replace('#(<li>.*?</li>)+#', '<ul>$0</ul>', $html)

序列 .*?就像 .*除了尾随 ?是非贪婪修饰符。默认 .*是贪婪的——它会尽可能多地消耗字符,如果模式的其余部分不匹配,则回溯。非贪婪修饰符反转了这一点。它消耗尽可能少的字符,如果模式的其余部分不匹配,则继续前进。由于模式的其余部分只是 </li> ,这有效地捕获了所有文本,但不包括第一个序列 </li> .然后将此模式嵌套在捕获中,然后用 + 重复该捕获。 ,意味着它将匹配 <li> 的一个或多个序列标签。

关于php - 正则表达式问题 - 如果我知道如何正确提问,我也会正确地知道答案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5189118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com