0

我有以下数据:

<h5> MY DATA </h5>
» Test data1
» Test data2
» Test data3

我希望匹配除第一个之外的所有“»”。但是我尝试过的各种正则表达式都不起作用。请建议一些解决方案。

谢谢

4

2 回答 2

2

但是你为什么要匹配»除第一个之外的每一个?如果您告诉我们您正在尝试完成什么,而不是您尝试如何完成它,您会得到更好的回应。

据我了解,您有两行或多行以某个字符开头的块,并且您希望在<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

于 2013-11-10T15:04:27.600 回答
1

你可以试试这个:

$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

该模式的目标是在字符串中的好位置匹配一个空字符串。

于 2013-11-10T13:13:06.337 回答