我正在regex101.com
上对此进行测试正则表达式:^\+([0-9A-Za-z-]+)(?:\.([0-9A-Za-z-]+))*$
测试字符串:+beta-bar.baz-bz.fd.zz
字符串匹配,但“匹配信息”框显示只有两个捕获组:
MATCH 1
1. [1-9] `beta-bar`
2. [20-22] `zz`
我期待所有这些捕获:
为什么句点之间的每个标识符都不会被识别为自己的捕获组?
答案 0 :(得分:3)
之所以发生这种情况,是因为当在捕获组上使用量词并且它被捕获 n 次时,只有最后捕获的文本存储在缓冲区中并在最后返回。
您可以preg_split
使用简单的正则表达式[+.]
来$str = "+beta-bar.baz-bz.fd.zz";
$a = preg_split('/[+.]/', $str, -1, PREG_SPLIT_NO_EMPTY);
字符串,而不是匹配这些部分:
Array
(
[0] => beta-bar
[1] => baz-bz
[2] => fd
[3] => zz
)
请参阅IDEONE demo
结果:
(print "Enter the elements of the array")
(setq k 10)
(setq A (make-array '(10)))
(setq i 0)
(loop
(if (>= i 10) (return))
(setq x (read))
(setf (aref A i) x)
(incf i)
)
(defun quicksort(start end)
(if (< start end)
((setq pindex (lambda (start end)))
(quicksort(start (- pindex 1)))
(quicksort((+ pindex 1) end))))
)
(defun partition(start end)
(setq pivot (aref A end))
(setq pindex start)
(setq j 0)
(loop
(if (>= j end) return)
(if (< (aref A j) pivot)
((setq temp (aref A pindex))
(setq pindex (aref A j))
(setq (aref A j) temp)
(incf pindex)))
(incf j)
)
(setq temp (aref A pindex))
(setq (aref A pindex) pivot)
(setq (aref A end) temp)
)
(quicksort 0 10)