如何在php中的多行上找到两个其他字符串之间的字符串

时间:2017-09-21 12:30:38

标签: javascript php arrays regex

所以,我有一个旧网站的源代码,其中有许多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?)(\)\;)/这样的东西,然后它选择了一些,但是效果不好。

有没有办法检索每个单独的数组?那样我就可以拿出关键名字并取值?这让我疯狂,试图让它发挥作用!

1 个答案:

答案 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/

我还建议在数据对象而不是输出格式中使用数据。