3

ライン上で唯一のものである整数を交換するパターンを構築したい

整数と同じ行に単語がある場合、何も変更したくありません。

試してみ$pattern = '/(.)[0-9][0-9](.)/'; ましたが、これは私にはうまくいきません

たとえば、試してみると$pattern = '/1(.)2(.)3(.)/';、パターンに入れる唯一の単一の数字が置き換えられます

この件名の例を置き換えたい

subject = "
1
2
3
4
5
6
7
8
9
10
"

数値は 10 進数ではなく整数である必要があり、それらの一部はランダムですが、数値と同じ行にテキストがあってはなりませんか?

何か案は?

4

2 に答える 2

2

正規表現は、すべてのプログラミングの問題に対する答えとなる魔法の杖ではありません。

explode()この場合、実際に を使用して件名を\n分割し、行を配列として操作してから、 で件名を再作成したいようですimplode()。と の場合、2 つの行を処理する方がはるかに簡単$lines[$x]です$lines[$y]

さらに、行が HTML から来ている場合、正規表現を使用して HTML を解析したくありません。代わりに、PHP DOM モジュールを使用します。 http://php.net/manual/en/book.dom.php

于 2012-12-02T14:47:02.147 に答える
1

必要なのは multi-line mode ですm。使用すると、各行^の先頭と末尾に一致します。$次に\d+、任意の長さの整数に使用します。

/^[ \t]*\d+[ \t]*$/m

数に加えて、任意の[ \t]*数のスペースとタブを許可します。これにより、数字とともに空白が削除されることに注意してください。空白を保持したい場合は、

/^([ \t]*)\d+([ \t]*)$/m

そして、置換文字列を次のように変更します

$1yourReplacementString$2

編集:

\ror\nまたは\r\nbut<br>タグのように、改行がないことに気付きました。それはそれを少し難しくします。このようなものはほとんどの場合をカバーするはずです:

~((?:^|<br[ ]*/?>)[ \t]*)\d+([ \t]*(?:$|<br\b))~

繰り返しますが、タグを削除しないように、置換文字列を前後$1に追加する必要があります。$2<br>

しかし Andy が言ったように、HTML は正規表現を使用して扱うべきではありません。PHP が提供する組み込みの DOM モジュールを使用するか、このようなサードパーティ ライブラリを使用します。

于 2012-12-02T12:13:06.467 に答える