从小时起,我试图找到正确的正则表达式。我们说我有这个:
$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
部分本身并不重要。我只需要函数本身的逻辑。
答案 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] => ""
)
)
希望这有帮助;)