Pavel
Pavel

Reputation: 13

php RegEx extract values from string

I am new to regular expressions and I am trying to extract some specific values from this string:

"Iban: EU4320000713864374\r\nSwift: DTEADCCC\r\nreg.no 2361 \r\naccount no. 1234531735"

Values that I am trying to extract:

EU4320000713864374

2361

This is what I am trying to do now:

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

All I am getting back is null or empty array. Any suggestions would be highly appreciated

Upvotes: 1

Views: 4695

Answers (2)

hakre
hakre

Reputation: 198119

The square brackets make no sense, you perhaps meant to anchor at the beginning of a line:

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

This requires to set the multi-line modifier (see m at the very end). I also replaced \r\n with \R so that this handles all kind of line-separator sequences easily.

Example: https://eval.in/47062

A slightly better variant then only captures non-whitespace values:

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

Example: https://eval.in/47069

Result then is (beautified):

Array
(
    [0]     => "Iban: EU4320000713864374
Swift: DTEADCCC
reg.no 2361"
    [iban]  => "EU4320000713864374"
    [1]     => "EU4320000713864374"
    [regnr] => "2361"
    [2]     => "2361"
)

Upvotes: 1

Dennis Gawrisch
Dennis Gawrisch

Reputation: 1060

preg_match("/Iban: (\\S+).*reg.no (\\S+)/s", $str, $matches);

There is a specific feature about newlines: dot (.) does not match newline character unless s flag is specified.

Upvotes: 0

Related Questions