所以,我有一个旧网站的源代码,其中有许多javascript数组对于检索很重要,但手动执行的数据太多了。我现在需要在数据库中使用这些数据,所以我想我可以使用某种解析器来收集准备插入的PHP数组中的数据。
它将从中读取的javascript数组源代码如下:
array['john'][0] = new Array(
'Select',
'10',
'20',
'30',
);
array['john'][1] = new Array(
'Select',
'40',
'83',
'23',
);
array['jack'][0] = new Array(
'Select',
'47',
'29',
'11',
);
array['jack'][2] = new Array(
'Select',
'13',
'24',
'32',
);
我认为最好的方法是使用正则表达式,我尝试使用像/array[[\w\W]*][[\d\D]*] = new Array(\()(.*\n?)(\)\;)/
这样的东西,然后它选择了一些,但是效果不好。
有没有办法检索每个单独的数组?那样我就可以拿出关键名字并取值?这让我疯狂,试图让它发挥作用!
答案 0 :(得分:0)
您的正则表达式已关闭但缺少转义并创建不正确的字符类。这个正则表达式应该为你找到每个数组块:
array\['[a-zA-Z]+?'\]\[\d+\] = new Array\([\s\S]+?\);
\[
是一个转义括号,没有反斜杠,它创建了一个字符类,使文字内的所有内容成为可能。 [a-zA-Z]+
是任何字母字符(您使用的\w
也允许数字和下划线,而\W
它允许所有内容,因为它是反向的),+
需要一个或多个人在场。直到第一个]
(再次逃脱)。然后我们查找数字索引(\ d)是一个数字,或者它可能是[0-9]
。在遇到[\s\S]+?
之前,\);
正在搜索空格或非空格。如果使用.+?
修饰符,则可以将其交换为s
。
/array\['[a-zA-Z]+?'\]\[\d+\] = new Array\(.+?\);/s
这是一个演示:https://regex101.com/r/y7zdGp/1/
我还建议在数据对象而不是输出格式中使用数据。