1

私は正規表現が初めてで、この文字列からいくつかの特定の値を抽出しようとしています:

"Iban: EU4320000713864374\r\nSwift: DTEADCCC\r\nreg.no 2361 \r\n口座番号 1234531735"

抽出しようとしている値:

EU4320000713864374

2361

これは私が今やろうとしていることです:

preg_match('/[^Iban: ](?<iban>.*)[^\\r\\nreg.no ](?<regnr>.*)[^\\r\\n]/',$str,$matches);

私が得ているのはnullまたは空の配列だけです。どんな提案でも大歓迎です

4

2 に答える 2

1

角かっこは意味がありません。おそらく行の先頭に固定するつもりでした:

$result = preg_match(
    '/^Iban: (?<iban>.*)\R.*\R^reg.no (?<regnr>.*)/m'
    , $str, $matches
);

これには、複数行の修飾子を設定する必要があります (m最後のセクションを参照)。また、すべての種類の行区切りシーケンスを簡単に処理できるように置き換えまし\r\nた。\R

例: https://eval.in/47062

わずかに優れたバリアントは、空白以外の値のみをキャプチャします。

$result = preg_match(
    '/^Iban: (?<iban>\S*)\R.*\R^reg.no (?<regnr>\S*)/m'
    , $str, $matches
);

例: https://eval.in/47069

結果は(美化された):

Array
(
    [0]     => "Iban: EU4320000713864374
Swift: DTEADCCC
reg.no 2361"
    [iban]  => "EU4320000713864374"
    [1]     => "EU4320000713864374"
    [regnr] => "2361"
    [2]     => "2361"
)
于 2013-09-06T12:43:06.717 に答える
0
preg_match("/Iban: (\\S+).*reg.no (\\S+)/s", $str, $matches);

s改行に関する特定の機能があります。フラグが指定されていない限り、ドット (.) は改行文字と一致しません。

于 2013-09-06T12:42:19.133 に答える