例如,我有类似
的东西对正确和错误的标准的研究称为 _ 。
一个。纯科学
湾应用科学
℃。伦理
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中执行此操作?
答案 0 :(得分:1)
每个解决方案之间是否保证有换行符?的是的强> ...
在javascript中,您可以使用以下解决方案之一。
使用split
方法,您可以执行以下操作:
results = myString.split(/[\r\n]+/);
使用match()
方法,您可以执行以下操作,这将匹配非换行符的部分。
results = myString.match(/[^\r\n]+/g);
在php中,您可以使用以下解决方案之一完成所需任务。
$wanted = preg_split('~\R+(?!$)~u', $data);
print_r($wanted);
\R
匹配通用换行符;也就是说,任何被Unicode视为换行序列的东西。这包括由\v
(垂直空白)和多字符序列\x0D\x0A
匹配的所有字符。要正确使用,您需要启用u
修饰符。 u
修饰符打开PCRE的其他功能,模式字符串被视为UTF-8。
我使用$
(行尾)后使用否定前瞻,这样就不会包含空白空格。
您可以在此处使用否定来避免使用拆分和匹配。
$wanted = preg_match_all('~[^\r\n]+~', $data, $matches);
print_r($matches);
输出
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);