fork(1) download
  1. <?php
  2.  
  3. $string = 'Q1
  4.  
  5. Question text 1?
  6.  
  7. 1. Answer A
  8. 2. Answer B (+1p)
  9. 3. Answer C
  10. 4. Answer D (+1p)
  11.  
  12. Q2
  13.  
  14. Question Text 2?
  15.  
  16. 1. Answer A (+1p)
  17. 2. Answer B
  18. 3. Answer C (+1p)
  19. 4. Answer D
  20.  
  21. Q3
  22.  
  23. Question Text 3?
  24.  
  25. 1. Answer A
  26. 2. Answer B
  27. 3. Answer C (+1p)
  28.  
  29. Q4
  30.  
  31. Question Text 4
  32.  
  33. 1. Answer A (+1p)
  34. 2. Answer B (+1p)
  35. 3. Answer C (+1p)
  36.  
  37. ';
  38.  
  39. $regex_questions = '~(?ms)(?:^$\R)(?P<answers>(?:^\d\. Answer [A-E].*?\R)+?)(?:^$\R)(?-ms)~';
  40. preg_match_all($regex_questions, $string, $questions, PREG_OFFSET_CAPTURE);
  41.  
  42. $regex_answers = '~(?m)^(?:\d\. Answer (?<choice>[A-E]).*?\(\+1p\))$~';
  43. $offset = 0;
  44.  
  45. foreach ($questions["answers"] as $question) {
  46. preg_match_all($regex_answers, $question[0], $answers);
  47. $answer = "Answer: " . implode(',', $answers["choice"]) ."\n";
  48. $position = $offset + $question[1] + strlen($question[0]);
  49. $string = substr_replace($string, $answer, $position, 0);
  50. $offset += strlen($answer);
  51. }
  52. echo $string;
  53. ?>
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Q1

Question text 1?

1. Answer A
2. Answer B (+1p)
3. Answer C
4. Answer D (+1p)
Answer: B,D

Q2

Question Text 2?

1. Answer A (+1p)
2. Answer B
3. Answer C (+1p)
4. Answer D 
Answer: A,C

Q3

Question Text 3?

1. Answer A
2. Answer B
3. Answer C (+1p)
Answer: C

Q4

Question Text 4

1. Answer A (+1p)
2. Answer B (+1p)
3. Answer C (+1p)
Answer: A,B,C