使用正则表达式匹配由分隔符包围的字符串的一部分

时间:2011-09-05 06:48:46

标签: php regex

我正在尝试将字符串的一部分与分隔符匹配。我想要检索的字符串是货币符号。

字符串看起来像:

0.040-aa-¥-bb-234,5.4
234,5.4-aa-CN¥-bb-blahblahb
-aa-$-bb-sdfsefblah3949
34blah-aa-$-bb-
and so on.

这应该被提取到:

¥
CN¥
$
$

基本上,我会有一个由任意数量的字符组成的字符串,带有货币符号。货币符号的前面总是-aa-,后面是-bb-。我想重温这两个分隔符之间的内容。

目前,我已经提出了这个表达式:-aa-[^\]]+-bb-,但它包含-aa-和-bb-。如何排除这些部分?

干杯:)

2 个答案:

答案 0 :(得分:2)

preg_match('/(?<=-aa-)[^-]*(?=-bb-)/', $string, $matches)

为您提供货币符号作为整个匹配结果。

(?<=...)(?=...)lookaround assertions,这意味着他们会检查当前位置之前或之后是否存在所附的正则表达式,而不会将它们作为整体匹配的一部分。

答案 1 :(得分:1)

要检索表达式的特定部分,请使用捕获组,例如

if (preg_match('/-aa-(.+?)-bb-/', $string, $matches) == 1) {
    $symbol = $matches[1];
}