Php 如何匹配一块<;李></李>;使用regexp
我怎样才能配得上一块巧克力呢Php 如何匹配一块<;李></李>;使用regexp,php,regex,Php,Regex,我怎样才能配得上一块巧克力呢 <li>item 1</li> <li>item 2</li> 第1项 项目2 无论块之前或之后是否有空行 并使用PHP的preg.* 功能 感谢您的回答David已经说过,php有xml和html解析器。但是,如果您真的想使用正则表达式,它可能是这样的: preg_match('#<li>(.*?)</li>#', $string); // Same thing preg_match('#
<li>item 1</li>
<li>item 2</li>
第1项
项目2
无论块之前或之后是否有空行
并使用PHP的preg.*
功能
感谢您的回答David已经说过,php有xml和html解析器。但是,如果您真的想使用正则表达式,它可能是这样的:
preg_match('#<li>(.*?)</li>#', $string);
// Same thing
preg_match('#<li>(.*)</li>#U', $string);
preg#u match('#(.*) #',$string);
//同样的事情
preg#U match('#(.*) #U',$string);
David已经说过,php有xml和html解析器。但是,如果您真的想使用正则表达式,它可能是这样的:
preg_match('#<li>(.*?)</li>#', $string);
// Same thing
preg_match('#<li>(.*)</li>#U', $string);
preg#u match('#(.*) #',$string);
//同样的事情
preg#U match('#(.*) #U',$string);
如果这是一种安全、受控的输入,而您刚刚得到的LIs缺少父ULs,您可以执行以下操作:
preg_replace ( '#\s*(?:<li>.*</li>\s*)+#' , '<ul>$0</ul>', $input )
preg#u replace('#\s*(?:* \s*)+#','$0
',$input)
(您可能需要在UL之前或之后的替换字符串中添加一些\n
。注意:如果:
- 内容中有任何现有的UL/OL列表
- 在连续的列表项之间除了空格之外,没有其他内容
- 任何LIs跨越多行(默认情况下,
不包括换行符) - LIs上有任何属性
- 可能有些事情我没有考虑过
如果您在用户提供的HTML上使用了错误的正则表达式,则可能是在代码中引入了错误的正则表达式。如果这是安全的、受控的输入,并且您刚刚获得了缺少父ULs的LIs,您可以执行以下操作:
preg_replace ( '#\s*(?:<li>.*</li>\s*)+#' , '<ul>$0</ul>', $input )
preg#u replace('#\s*(?:* \s*)+#','$0
',$input)
(您可能需要在UL之前或之后的替换字符串中添加一些\n
。注意:如果:
- 内容中有任何现有的UL/OL列表
- 在连续的列表项之间除了空格之外,没有其他内容
- 任何LIs跨越多行(默认情况下,
不包括换行符) - LIs上有任何属性
- 可能有些事情我没有考虑过
如果您在用户提供的HTML上使用了一个不好的正则表达式,您可能会在代码中引入它。PHP必须有某种XML解析器。不要再想使用正则表达式了。它们是错误的工作工具。可以使用regexp,但这不是一个好主意。XML解析器更适合解决这类问题首先:人们对询问如何使用正则表达式解析HTML感到厌烦。第二:从伦敦到爱丁堡可以蒙着眼睛跳来跳去,但这并不意味着这是个好主意。第三:我们不是已经过了指责那些说无知是坏主意的人的阶段了吗?我们能马上停止抨击这些问题吗?如果内容是众所周知的,并且OP有一个非常特殊的需求,正则表达式是非常好的。不要把答案当作是圣歌之类的链接。这是一个有效的问题:提供一个有效的答案,或者继续前进。PHP必须有某种XML解析器。不要再想使用正则表达式了。它们是错误的工作工具。可以使用regexp,但这不是一个好主意。XML解析器更适合解决这类问题首先:人们对询问如何使用正则表达式解析HTML感到厌烦。第二:从伦敦到爱丁堡可以蒙着眼睛跳来跳去,但这并不意味着这是个好主意。第三:我们不是已经过了指责那些说无知是坏主意的人的阶段了吗?我们能马上停止抨击这些问题吗?如果内容是众所周知的,并且OP有一个非常特殊的需求,正则表达式是非常好的。不要把答案当作是圣歌之类的链接。这是一个有效的问题:提供一个有效的答案或者继续。当使用
#
作为正则表达式边界时,您真的需要避开/
吗?这一点很好。刚刚测试过,它也能正常工作,不会逃逸。我去掉了斜线。谢谢:)这只在每个都有一行代码的情况下才有效。如果一行中有多个列表元素,它将匹配整行,而不是它自身的每个元素。如果一行上有多个 -标记,则它不起作用。这就是为什么?
紧跟在*
之后,或者在第二个版本中,我使用U
-修饰符来逆转贪婪。如果你不考虑这一点,事情就会像你说的那样进行,item1
item2
将是匹配的。这里的情况不是这样,每条线总是有一对锂。非常感谢faileN:)当使用#
作为正则表达式边界时,您真的需要避开/
吗?很好。刚刚测试过,它也能正常工作,不会逃逸。我去掉了斜线。谢谢:)这只在每个都有一行代码的情况下才有效。如果一行中有多个列表元素,它将匹配整行,而不是它自身的每个元素。如果一行上有多个 -标记,则它不起作用。这就是为什么?
紧跟在*
之后,或者在第二个版本中,我使用U
-修饰符来逆转贪婪。如果你愿意离开