preg_match正确的正则表达式

时间:2013-12-12 19:06:13

标签: php regex preg-replace

从小时起,我试图找到正确的正则表达式。我们说我有这个:

$string = 'a=a.split("")';

$string = 'a=Ik(a,66)';

我想得到的输出是:

[1] => a
[2] => a
[3] => split
[4] => ""

和第二个:

[1] => a
[2] => IK
[3] => a,66

我试过了:

preg_match('#(.+)=(.+).(.+)[(](.+)[)]#', $string, $matches);

但是输出:

Array
(
    [0] => a=a.split("")
    [1] => a
    [2] => a.spl
    [3] => t
    [4] => ""
)

为什么我要这个?我想将一些javascript转换为PHP。例如:

function Hk(a) {
    a = a.split("");
    a = a.slice(1);
    a = a.reverse();
    a = Ik(a, 66);
    a = a.slice(2);
    a = a.reverse();
    a = Ik(a, 12);
    return a.join("")
}

function Ik(a, b) {
    var c = a[0];
    a[0] = a[b % a.length];
    a[b] = c;
    return a
}

#编辑:我想要的是将其转换为PHP代码并输出它。我不想执行它。

例如,上面的javascript代码应该是这样的:

第一个功能:

$a = str_split($a);
$a = array_slice($a, 1);
$a = array_reverse($a);
$a = self::Ik($a,66);
$a = array_slice($a, 2);
$a = array_reverse($a);
$a = self::Ik($a,12);
return implode("", $a);  

第二个功能:

$c = $a[0];
$a[0] = $a[$b%count($a)];
$a[$b] = $c;
return $a;  

function部分本身并不重要。我只需要函数本身的逻辑。

2 个答案:

答案 0 :(得分:0)

您可能需要consider preg_split

$arr = preg_split('/[=()]/', 'a=a.split("")', -1, PREG_SPLIT_NO_EMPTY);
Array
(
    [0] => a
    [1] => a.split
    [2] => ""
)

$arr = preg_split('/[=()]/', 'a=Ik(a,66)', -1, PREG_SPLIT_NO_EMPTY);
Array
(
    [0] => a
    [1] => Ik
    [2] => a,66
)

答案 1 :(得分:0)

使用php PCRE,这应该适用于两种模式,即使您填充了不同的数组元素,具体取决于哪种模式匹配。我想你可以通过测试nil等元素来解决它。 这是通过断言和先行(我们有一个点,这导致一个元素更多)来完成的:

([^=]+)=(?(?=.+\.)([^.]+)\.([^.]+)|([^.]+))\((.+)\)

这是出现的结果:

(
    [0] => Array
        (
            [0] => a=Ik(a,66)
        )

    [1] => Array
        (
            [0] => a
        )

    [2] => Array
        (
            [0] => 
        )

    [3] => Array
        (
            [0] => 
        )

    [4] => Array
        (
            [0] => Ik
        )

    [5] => Array
        (
            [0] => a,66
        )

)

和这一个:

(
    [0] => Array
        (
            [0] => a=a.split("")
        )

    [1] => Array
        (
            [0] => a
        )

    [2] => Array
        (
            [0] => a
        )

    [3] => Array
        (
            [0] => split
        )

    [4] => Array
        (
            [0] => 
        )

    [5] => Array
        (
            [0] => ""
        )

)

希望这有帮助;)