我是正则表达式的新手,我正在尝试从此字符串中提取一些特定值:
" 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或空数组。任何建议都将受到高度赞赏
答案 0 :(得分:1)
方括号毫无意义,你或许意味着锚定在一行的开头:
$result = preg_match(
'/^Iban: (?<iban>.*)\R.*\R^reg.no (?<regnr>.*)/m'
, $str, $matches
);
这需要设置多行修饰符(最后请参见m
)。我还将\r\n
替换为\R
,以便轻松处理所有类型的行分隔符序列。
稍微更好的变体然后只捕获非空白值:
$result = preg_match(
'/^Iban: (?<iban>\S*)\R.*\R^reg.no (?<regnr>\S*)/m'
, $str, $matches
);
然后结果是(美化):
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
标志,否则点(。)与换行符不匹配。