php RegEx从字符串中提取值

时间:2013-09-06 12:33:51

标签: php regex cakephp

我是正则表达式的新手,我正在尝试从此字符串中提取一些特定值:

  

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

我想要提取的值:

EU4320000713864374

2361

这就是我现在要做的事情:

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

我回来的只是null或空数组。任何建议都将受到高度赞赏

2 个答案:

答案 0 :(得分: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"
)

答案 1 :(得分:0)

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

有关换行符的特定功能:除非指定s标志,否则点(。)与换行符不匹配。