Ayxan Emiraslanli
Ayxan Emiraslanli

Reputation: 87

php regex get strings from JS code

The input is:

arrCur['AZN'] = 1;
arrCur['AZN'] = 1;
arrCur['USD'] = 1.545;
arrCur['USD'] = 1.57;
arrCur['EUR'] = 1.72;
arrCur['EUR'] = 1.745;
arrCur['GBP'] = 2.02;
arrCur['GBP'] = 2.1753;
arrCur['RUR'] = 0.02381;
arrCur['RUR'] = 0.025;
arrCur['TRY'] = 0.5095;
arrCur['TRY'] = 0.5519;

I want to get currency codes and rates. My code is:

if(preg_match_all('/arrCur[\'(.*?)\'] \= (.*?)\;/mis', $get, $arrcur))
{
    print_r($arrcur);
    die;
}

But it don't worked. Where is my mistake?

Upvotes: 0

Views: 25

Answers (2)

user94559
user94559

Reputation: 60153

You need to escape the square brackets, since they have special meaning in a regular expression.

You're also needlessly escaping = and ;, so you can remove those backslashes. And if you use double quotes, you can avoid escaping the single quotes in the expression. Here's a fixed version:

$get = <<<END
arrCur['AZN'] = 1;
arrCur['AZN'] = 1;
arrCur['USD'] = 1.545;
arrCur['USD'] = 1.57;
arrCur['EUR'] = 1.72;
arrCur['EUR'] = 1.745;
arrCur['GBP'] = 2.02;
arrCur['GBP'] = 2.1753;
arrCur['RUR'] = 0.02381;
arrCur['RUR'] = 0.025;
arrCur['TRY'] = 0.5095;
arrCur['TRY'] = 0.5519;
END;

$arrcur = [];
if(preg_match_all("/arrCur\['(.*?)'\] = (.*?);/mis", $get, $arrcur))
{
    print_r($arrcur);
    die;
}

Output:

Array
(
    [0] => Array
        (
            [0] => arrCur['AZN'] = 1;
            [1] => arrCur['AZN'] = 1;
            [2] => arrCur['USD'] = 1.545;
            [3] => arrCur['USD'] = 1.57;
            [4] => arrCur['EUR'] = 1.72;
            [5] => arrCur['EUR'] = 1.745;
            [6] => arrCur['GBP'] = 2.02;
            [7] => arrCur['GBP'] = 2.1753;
            [8] => arrCur['RUR'] = 0.02381;
            [9] => arrCur['RUR'] = 0.025;
            [10] => arrCur['TRY'] = 0.5095;
            [11] => arrCur['TRY'] = 0.5519;
        )

    [1] => Array
        (
            [0] => AZN
            [1] => AZN
            [2] => USD
            [3] => USD
            [4] => EUR
            [5] => EUR
            [6] => GBP
            [7] => GBP
            [8] => RUR
            [9] => RUR
            [10] => TRY
            [11] => TRY
        )

    [2] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1.545
            [3] => 1.57
            [4] => 1.72
            [5] => 1.745
            [6] => 2.02
            [7] => 2.1753
            [8] => 0.02381
            [9] => 0.025
            [10] => 0.5095
            [11] => 0.5519
        )

)

Upvotes: 2

Ayxan Emiraslanli
Ayxan Emiraslanli

Reputation: 87

Gotcha!

if(preg_match_all('/arrCur\[\'(.*?)\'\] \= (.*?)\;/mis', $get, $arrcur))
{
    print_r($arrcur);
    die;
}

Upvotes: 0

Related Questions