如何将多项选择问题和解决方案解析为数组格式?

时间:2013-11-05 01:47:15

标签: javascript php regex

例如,我有类似

的东西
  

对正确和错误的标准的研究称为 _

     

一个。纯科学

     

湾应用科学

     

℃。伦理

     

d。技术

     

......未知数量的选择......

     

ANS:C

我希望将其拆分为

['The study of standards for what is right and what is wrong is called _____.',
'pure science',
'applied science',
'ethics',
'technology',

... as many array elements as there are choices ... 

'ANS: C']

是否有一个我可以使用的正则表达式可以使用任意数量的选项? 如果没有,您将如何在Javascript或PHP中执行此操作?

2 个答案:

答案 0 :(得分:1)

  

每个解决方案之间是否保证有换行符?的是的 ...

中,您可以使用以下解决方案之一。

使用split方法,您可以执行以下操作:

results = myString.split(/[\r\n]+/);

使用match()方法,您可以执行以下操作,这将匹配非换行符的部分。

results = myString.match(/[^\r\n]+/g);

中,您可以使用以下解决方案之一完成所需任务。

$wanted = preg_split('~\R+(?!$)~u', $data);
print_r($wanted);

请参阅live working demo

\R匹配通用换行符;也就是说,任何被Unicode视为换行序列的东西。这包括由\v(垂直空白)和多字符序列\x0D\x0A匹配的所有字符。要正确使用,您需要启用u修饰符。 u修饰符打开PCRE的其他功能,模式字符串被视为UTF-8。

我使用$(行尾)后使用否定前瞻,这样就不会包含空白空格。

您可以在此处使用否定来避免使用拆分和匹配。

$wanted = preg_match_all('~[^\r\n]+~', $data, $matches);
print_r($matches);

请参阅live working demo

输出

Array
(
    [0] => The study of standards for what is right and what is wrong is called _.
    [1] => a. pure science
    [2] => b. applied science
    [3] => c. ethics
    [4] => d. technology
    [5] => ... unknown number of choices ...
    [6] => ANS: C
)

答案 1 :(得分:0)

我建议根据EOL(\r\n\n)迭代每一行。然后,您可以检查每一行,看它是问题还是答案项目或答案。如果您希望将它们全部放在一个数组中,则可以使用array_push()

还发现这可能有用:How to put string in array, split by new line?

基本上只是将每一行分成如下所述的数组:

$array = preg_split ('/$\R?^/m', $string);