使用正则表达式解析多选列表

时间:2016-07-18 11:59:29

标签: php regex

我正在尝试解析多项选择题以将其保存到数据库中。 多项选择问题有两到四个问题的混合问题。

以下是一个示例:

1) First question with 4 choices ?
a) First choice b) Second choice c) Third choice d) Last choice
2) Second question with only 3 choices ? 
a) First choice b) Second choice c) Last choice
3) True or False ? 
a) True b) False
...

我一直在尝试使用正则表达式在PHP中解析它,这是我到目前为止提出的表达式:

/(?P<q_num>\d{1,3})\)\s?(?P<quest>.+)\n(\s?a\)\s?)(?P<ans_a>.+)(b\)\s?)(?P<ans_b>.+)(c\)\s?)(?P<ans_c>.+)((d\)\s?)(?P<ans_d>.+))?/g

但是当可用时,选项D与选择C合并(或者仅在2个选项的情况下C + D与B合并)并且我无法将其分开。

See it here

你会建议什么?

1 个答案:

答案 0 :(得分:1)

尝试更换简单的&#34;任何东西&#34; (.+)模式,用于答案选项&#34;任何不包含&#39; [a-d])&#39;&#34;&#34; ((?:(?![a-d]\)).)+):

/(?P<q_num>\d{1,3})\)\s?(?P<quest>.+)\n

(\s?a\)\s?)(?P<ans_a>(?:(?![a-d]\)).)+)
   (b\)\s?)(?P<ans_b>(?:(?![a-d]\)).)+)
  ((c\)\s?)(?P<ans_c>(?:(?![a-d]\)).)+))?
  ((d\)\s?)(?P<ans_d>(?:(?![a-d]\)).)+))?
/gx

演示:https://regex101.com/r/gC0tB1/2

注意:我添加了x修饰符,使表达式更具可读性。