删除没有完整的打开代码html标记或没有追随者


Remove no complete opening code html tag or with no follower

我可能会得到一些带有codehtml标记的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'

我试图找到regex。然后,我会得到未删除标记的长度,并使用phpsubstr函数,但没有成功:

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

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

什么regex可以完成这项工作,或者什么php代码?感谢

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

你所要做的就是把不正确的部分变成负数
前瞻性断言。

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

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

扩展

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

为了让它有内容,需要稍微修改一下。

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

扩展

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

记住,这不遵循任何html解析规则,因为它不能
因此,您能做的最好的事情就是获取
之后字符串的剩余部分一场比赛
事实上,它不能在字符串中多次匹配,因为没有
这样做的规则。