1

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

“伊班: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);

我得到的只是空数组或空数组。任何建议将不胜感激

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 回答