我正在尝试替换可能出现多次的字符串。它以特定字符串开头和结尾:
some text
more text here
[li]......[/li]
[li]......[/li]
[li]......[/li]
我可以检查前的字符串[L]和[李]如果说之前李:是一个字符串,但不是[/ LI]然后用除换行符相同的模式与一个正则表达式一倍更换呢?
我想检查什么:
some strings
\n // Replace this one
[li]some strings[/li] \n
[li]some strings[/li] \n // This one is not replaced, because the string before this [li] were [/li]
[li]some strings[/li] \n
some strings
如果条件满足,则像这样
some strings
\n\n // With this one instead
[li]some strings[/li] \n
[li]some strings[/li] \n
[li]some strings[/li] \n
some strings
到目前为止,这是我的代码,但我无法得到我想要的:
$data = preg_replace("/(.*)\([\n]/\[li\]/s", "[result]", $data);
您可以使用
'~(\[li\b[^]]*].*?\[\/li])(?:\R*(?1))*(*SKIP)(*F)|(\R)~s'
查看正则表达式演示
(\[li\b[^]]*].*?\[\/li])
- 第 1 组:[li...]...[/li]
子字符串(请注意,.*?
withs
修饰符将跨行匹配,并且将尽可能少地匹配除换行符以外的任何 0+ 个字符,因此它不会跨多个li
元素溢出。)(?:\R*(?1))*
- 零个或多个序列:
\R*
- 零个或多个换行符 (?1)
- 与第 1 组相同的模式(见上文)(*SKIP)(*F)
- 从缓冲区中删除匹配值|
- 或者(\R)
- 匹配并捕获一个换行符到第 2 组。替换是第 2 组中的值乘以 2($1$1
其中$1
引用了第 2 组中存储的值)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句