bug79257.phpt 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. --TEST--
  2. Bug #79257: Duplicate named groups (?J) prefer last alternative even if not matched
  3. --FILE--
  4. <?php
  5. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))/', 'foo', $matches);
  6. var_dump($matches);
  7. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))/', 'foo', $matches,
  8. PREG_UNMATCHED_AS_NULL);
  9. var_dump($matches);
  10. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))/', 'foo', $matches,
  11. PREG_OFFSET_CAPTURE);
  12. var_dump($matches);
  13. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))/', 'foo', $matches,
  14. PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE);
  15. var_dump($matches);
  16. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))(?<h>baz)/', 'foobaz', $matches);
  17. var_dump($matches);
  18. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))(?<h>baz)/', 'foobaz', $matches,
  19. PREG_UNMATCHED_AS_NULL);
  20. var_dump($matches);
  21. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))(?<h>baz)/', 'foobaz', $matches,
  22. PREG_OFFSET_CAPTURE);
  23. var_dump($matches);
  24. preg_match('/(?J)(?:(?<g>foo)|(?<g>bar))(?<h>baz)/', 'foobaz', $matches,
  25. PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE);
  26. var_dump($matches);
  27. ?>
  28. --EXPECT--
  29. array(3) {
  30. [0]=>
  31. string(3) "foo"
  32. ["g"]=>
  33. string(3) "foo"
  34. [1]=>
  35. string(3) "foo"
  36. }
  37. array(4) {
  38. [0]=>
  39. string(3) "foo"
  40. ["g"]=>
  41. string(3) "foo"
  42. [1]=>
  43. string(3) "foo"
  44. [2]=>
  45. NULL
  46. }
  47. array(3) {
  48. [0]=>
  49. array(2) {
  50. [0]=>
  51. string(3) "foo"
  52. [1]=>
  53. int(0)
  54. }
  55. ["g"]=>
  56. array(2) {
  57. [0]=>
  58. string(3) "foo"
  59. [1]=>
  60. int(0)
  61. }
  62. [1]=>
  63. array(2) {
  64. [0]=>
  65. string(3) "foo"
  66. [1]=>
  67. int(0)
  68. }
  69. }
  70. array(4) {
  71. [0]=>
  72. array(2) {
  73. [0]=>
  74. string(3) "foo"
  75. [1]=>
  76. int(0)
  77. }
  78. ["g"]=>
  79. array(2) {
  80. [0]=>
  81. string(3) "foo"
  82. [1]=>
  83. int(0)
  84. }
  85. [1]=>
  86. array(2) {
  87. [0]=>
  88. string(3) "foo"
  89. [1]=>
  90. int(0)
  91. }
  92. [2]=>
  93. array(2) {
  94. [0]=>
  95. NULL
  96. [1]=>
  97. int(-1)
  98. }
  99. }
  100. array(6) {
  101. [0]=>
  102. string(6) "foobaz"
  103. ["g"]=>
  104. string(3) "foo"
  105. [1]=>
  106. string(3) "foo"
  107. [2]=>
  108. string(0) ""
  109. ["h"]=>
  110. string(3) "baz"
  111. [3]=>
  112. string(3) "baz"
  113. }
  114. array(6) {
  115. [0]=>
  116. string(6) "foobaz"
  117. ["g"]=>
  118. string(3) "foo"
  119. [1]=>
  120. string(3) "foo"
  121. [2]=>
  122. NULL
  123. ["h"]=>
  124. string(3) "baz"
  125. [3]=>
  126. string(3) "baz"
  127. }
  128. array(6) {
  129. [0]=>
  130. array(2) {
  131. [0]=>
  132. string(6) "foobaz"
  133. [1]=>
  134. int(0)
  135. }
  136. ["g"]=>
  137. array(2) {
  138. [0]=>
  139. string(3) "foo"
  140. [1]=>
  141. int(0)
  142. }
  143. [1]=>
  144. array(2) {
  145. [0]=>
  146. string(3) "foo"
  147. [1]=>
  148. int(0)
  149. }
  150. [2]=>
  151. array(2) {
  152. [0]=>
  153. string(0) ""
  154. [1]=>
  155. int(-1)
  156. }
  157. ["h"]=>
  158. array(2) {
  159. [0]=>
  160. string(3) "baz"
  161. [1]=>
  162. int(3)
  163. }
  164. [3]=>
  165. array(2) {
  166. [0]=>
  167. string(3) "baz"
  168. [1]=>
  169. int(3)
  170. }
  171. }
  172. array(6) {
  173. [0]=>
  174. array(2) {
  175. [0]=>
  176. string(6) "foobaz"
  177. [1]=>
  178. int(0)
  179. }
  180. ["g"]=>
  181. array(2) {
  182. [0]=>
  183. string(3) "foo"
  184. [1]=>
  185. int(0)
  186. }
  187. [1]=>
  188. array(2) {
  189. [0]=>
  190. string(3) "foo"
  191. [1]=>
  192. int(0)
  193. }
  194. [2]=>
  195. array(2) {
  196. [0]=>
  197. NULL
  198. [1]=>
  199. int(-1)
  200. }
  201. ["h"]=>
  202. array(2) {
  203. [0]=>
  204. string(3) "baz"
  205. [1]=>
  206. int(3)
  207. }
  208. [3]=>
  209. array(2) {
  210. [0]=>
  211. string(3) "baz"
  212. [1]=>
  213. int(3)
  214. }
  215. }