我正在尝试解析多项选择题以将其保存到数据库中。 多项选择问题有两到四个问题的混合问题。
以下是一个示例:
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合并)并且我无法将其分开。
你会建议什么?
答案 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
修饰符,使表达式更具可读性。