我有以下数据:
<h5> MY DATA </h5>
» Test data1
» Test data2
» Test data3
我希望匹配除第一个之外的所有“»”。但是我尝试过的各种正则表达式都不起作用。请建议一些解决方案。
谢谢
但是你为什么要匹配»
除第一个之外的每一个?如果您告诉我们您正在尝试完成什么,而不是您尝试如何完成它,您会得到更好的回应。
据我了解,您有两行或多行以某个字符开头的块,并且您希望在<br/>
除最后一行之外的每一行的末尾添加一个标签。当你这样描述它时,正则表达式实际上是这样写的:
^ # beginning of line (in multiline mode)
(».+\R) # `»` and the rest of the line, including the trailing newline (`\R`)
(?=») # lookahead checks that the next line begins with `»`, too
该行在组 #1 中被捕获,因此我们将其插入替换字符串并添加<br/>
标签:
$result = preg_replace('/^(».+\R)(?=»)/m', '$1<br/>', $subject);
我不精通 PHP,但您可能需要添加 UTF8 修饰符 ( ) 或对字符 ( )/^(».+\R)(?=»)/mu
使用十六进制转义符。»
/^(\x{BB}.+\R)(?=\x{BB})/m
你可以试试这个:
$result = preg_replace('~[^>\s]\h*\R\K(?=»)~', '<br/>', $string);
细节:
[^>\s] # a character that is not a white char or a > (to avoid the first line)
\h* # horizontal white chars zero or more times (possible leading spaces)
\R # a new line
\K # remove all that have been matched before
(?=») # lookahead assertion, to check if there is a » after
该模式的目标是在字符串中的好位置匹配一个空字符串。