2013-01-15 137 views
0

我有JS文件,我需要解析该数组中它:解析数组与正则表达式

something: ['Prefix.All','Ignore.Me','Prefix.Another'] 

我需要从定义的前缀“东西”数组的所有元素。 现在我可以得到它,如果数组只包含一个元素。我的正则表达式:

String: something: ['Prefix.All'] 
Can get element with: 
/something\s*:\s*\[['"](Prefix[a-zA-Z0-9.]+)['"]]/ 

但是如何在数组中找到很多元素?以及如何在文件中找到多个“东西”数组?

+0

是您的* *的东西总是要开始'Prefix.All'我建议你用'comma'它拆分... – bonCodigo

+0

我需要在这里找到“Prefix。*** [。***]”。 Not Prefix.All –

+0

您使用了哪种正则表达式引擎?除非它是.NET,否则你不能用一个正则表达式来完成。 –

回答

3

在PHP中,你需要分两步做(这可能是更好的 - 将所有东西塞进一个正则表达式并不总是最好的想法)。

首先,匹配你正在寻找的数组。请注意,这正则表达式,需要有定界符[]之间没有支架,所以嵌套数组或包含括号会导致正则表达式失败的字符串(如“匹配错误文本”):

if (preg_match('/\bsomething: \[([^[\]]*)\]/', $subject, $regs)) { 
    $result = $regs[1]; 
} 

这将找到第一个出现的字符串,如something: ['Prefix.All','Ignore.Me','Prefix.Another'],并将'Prefix.All','Ignore.Me','Prefix.Another'放入$result

然后你可以从得到所有的比赛:

preg_match_all('/\bPrefix[^\']*/', $result, $final, PREG_PATTERN_ORDER); 
$final = $final[0]; 
+0

正是我在评论中所说的!做得好! – gaussblurinc

+0

我以这种方式尝试过。有用。谢谢。 –

0

在正则表达式中,您可以将令牌与()分组,并用*多次索要该令牌。

因此:(something)*会给你'something'这个词的每个实例。

此外:(__your__token__here__)*找到您的令牌的每个实例。

粘贴一些你的阵列的位置:http://gskinner.com/RegExr/和使用正则表达式生成器来测试你的正则表达式

这是否帮助?

+0

我试过一个简单的例子。在该字符串中查找创建[\ d]:“create2 create3 create4”。但()*不起作用。这是我的重复:/(创建[\ d])* /。它不能那样做。错误? –

+0

查看编辑 - 我总是使用在线正则表达式测试程序来测试我想要做的事情,直到我做对了 - 没有看到你的阵列有点难以弄清楚你想要实现什么。对于你的例子,你只需要'(创建[\ d])' –

+0

'(something)*'匹配''''''''东西“'''''somethingsomething”等,但它不会在所有OP想要的。 –