0

私は次のデータを持っています:

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

そして、最初のものを除くすべての '»' に一致させたいと考えています。しかし、私が試したさまざまな正規表現は機能しません。親切に解決策をアドバイスしてください。

ありがとう

4

2 に答える 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に 16 進エスケープを使用する必要がある可能性があります。»/^(\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 に答える