删除没有完整的开放代码html标记或没有关注者

时间:2016-05-01 23:28:02

标签: php regex string

我可能会使用代码 html标记获得一些html代码字符串。字符串将被剪切以获取它们的摘录。打破只能在空间。所以我可能会得到这样的字符串:

'abc <code asdfas = "fasd fdsa">Hello</code> ab <code asdfas = "fasd fdsa">Lorem ipsum'
'abc <code asdfas = "fasd fdsa">Hello</code> ab <code asdfas = "fasd fdsa">a'
'abc <code asdfas = "fasd fdsa">Hello</code> ab <code asdfas = "fasd fdsa">'
'abc <code asdfas = "fasd fdsa">Hello</code> ab <code asdfas = "fasd'
'abc <code asdfas = "fasd fdsa">Hello</code> ab <code asdfas'
'abc <code asdfas = "fasd fdsa">Hello</code> ab <code'
'abc <code asdfas = "fasd fdsa">Hello</code> ab'

代码开放标记应该被删除。代码开放标记不完整或者完整但后面没有任何内容。

因此在示例中,第一个,第二个和最后一个字符串必须保持不变。从第三个字符串到第四个字符串,必须删除开头的代码标记。

所以字符串集的结果应该是这样的:

'abc <code asdfas = "fasd fdsa">Hello</code> ab <code asdfas = "fasd fdsa">Lorem ipsum'
'abc <code asdfas = "fasd fdsa">Hello</code> ab <code asdfas = "fasd fdsa">a'
'abc <code asdfas = "fasd fdsa">Hello</code> ab '
'abc <code asdfas = "fasd fdsa">Hello</code> ab '
'abc <code asdfas = "fasd fdsa">Hello</code> ab '
'abc <code asdfas = "fasd fdsa">Hello</code> ab '
'abc <code asdfas = "fasd fdsa">Hello</code> ab'

我试图找到正则表达式。然后我会得到未经修改的标签的长度并使用php substr 函数,但没有成功:

(<code.+?)(?!.+>.+)$

https://regex101.com/r/dY5tW4/2

什么正则表达式会做什么工作或什么PHP代码? 谢谢

1 个答案:

答案 0 :(得分:1)

如果您可以解析该字符串以查找完整的<code ..>,那么它将是 像这样<code[^>}*>

你所要做的就是将那些不能正确的部分放入负面 先行断言。

(?s)<code(?![^>]*?>).*$

测试https://regex101.com/r/dY5tW4/4

扩展

 (?s)
 <code
 (?! [^>]*? > )
 .* 
 $ 

要使其具有内容,需要稍作修改。

(?s)<code(?![^>]*?>\s*\S).*$

扩展

 (?s)
 <code
 (?! [^>]*? > \s* \S )
 .* $  

请记住,这不符合html的任何解析规则,因为它不能 因此,你能做的最好的事情就是在第二节之后得到字符串的剩余部分 比赛。
实际上,它不能在字符串中多次匹配,因为没有
这样做的规则。