是否有正則表達式split()
操作的任何應用程序不能由單個match()
(或search()
,findall()
等)操作執行?正則表達式實現是否需要split()函數?
而不是做
subject.split('[|]')
例如,你可以得到相同的結果一起
subject.findall('[^|]*')
而且在幾乎所有的正則表達式引擎的調用(除了.NET和JGSoft),split()
不能做一些事情,如「拆分|
,除非他們逃脫\|
」,因爲你需要無限重複的內部看。
因此,而不是不得不做的東西很不可讀這樣的(嵌套lookbehinds!)
splitArray = Regex.Split(subjectString, @"(?<=(?<!\\)(?:\\\\)*)\|");
,你可以簡單地做(甚至在JavaScript中不支持任何一種的回顧後)
result = subject.match(/(?:\\.|[^|])*/g);
這讓我想知道:有沒有什麼在我所能做的一切split()
這是不可能實現一個match()
/findall()
改爲?我敢打賭沒有,但我可能忽略了一些東西。
(我定義「正則表達式」在現代,非正規意義上說,即使用現代的正則表達式都在他們的處置喜歡反向引用和環視了一切。)
人們可以用'find'和'substr'取代'split' ...那麼爲什麼'split'存在? (另外,即使split函數使用或可以使用正則表達式,「split」並不總是「正則表達式引擎」的函數。) – 2012-03-18 08:23:27
這顯然是一種更直觀和更好的擬合函數,如果您只想分割字符串上的一些簡單的分隔符。順便說一句'(?:\\\ || [^ |])*'不會和你顯示的.NET表達式一樣,例如'foo \\ | bar'。 '(?:[^ | \\] + | \\。)*'會更好。 – Qtax 2012-03-18 09:11:00
@Qtax:是的,在很多情況下,'split()'是一個非常受歡迎的「語法糖」形式。我只是想知道是不是更多。感謝您注意我的正則表達式中的錯誤;我糾正了它。 – 2012-03-18 09:27:37