开发者

Match part of string enclosed by delimiters using regex

I am trying to match a a part of a string with delimiters. The strings I would like to retrive are currency symbols.

Strings look like:

0.040-aa-¥-bb-234,5.4
234,5.4-aa-CN¥-bb-blahblahb
-aa-$-bb-sdfsefblah3949
34blah-aa-$-bb-
and so o开发者_高级运维n.

This should be extracted into:

¥
CN¥
$
$

So essentially, I will have a string made up of any amount of characters, with currency symbols. The currency symbol will always have -aa- at the front and -bb- at the back. I would like to retrive what's between those 2 delimiters.

Currently, I have came up with this expression: -aa-[^\]]+-bb-, however, it includes the -aa- and -bb-. How do I exclude those parts?

Cheers :)


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

gives you the currency symbol as the entire match result.

(?<=...) and (?=...) are lookaround assertions, meaning they check for the presence of the enclosed regexes before or after the current position without making them a part of the overall match.


To retrieve the specific part of the expression, use a capturing group, eg

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜