2017-08-10 87 views
1

我目前有一個驗證表達式,它幾乎按照我希望的方式工作,只有在某些行的開始處允許空格時纔有問題。我想在行首開始支持無限空間。如何使用正則表達式在每行的開始處允許空格?

下面是一個例子,並且我有麻煩的表情: ^(?=.?[ \t]([., \t]))(?:[1-9][0-9](?:[ \t]\1[ \t][1-9][0-9])+[ \t]*\r?\n?)+$

這裏的例子字符串我想匹配:

10 11 12 13 14 30 
9 41 42 44 46 48 
10 11 12 13 14 30 

我的第一個問題,這也解釋了我希望具體做的是發現:here

+1

你可以添加到你的問題的示例串,你想匹配? –

+0

你的輸入是否只是一個有數字和空格的字符串?你的正則表達式似乎太複雜了。 –

+0

不,我會接受多種分隔符類型:逗號,空格,製表符。 – justinpees

回答

1

作爲一個高級的主題,這將是一個有點難以理解,但在這裏不用。

^\s*[1-9][0-9]*\s*(?=([., \t]))(?:\s*(?:\1|\r?\n)\s*[1-9][0-9]*)+\s*$

你有一個獨特的問題,因爲你正在試圖驗證所有行
一個字符串。
問題出現時,分隔符是而不是可用在
的末尾一排。

要解決這個問題,使用的交替與反向引用(分隔符)
一個換行符。

至於字符串開始處的空格,只需穿插\s

看到這裏https://regex101.com/r/nir0uI/1這裏https://regex101.com/r/nir0uI/2

格式化

^
\s* 
[1-9] [0-9]* 
\s* 
(?=        # Lookahead for delimiter. 
     ([., \t])     # (1) 
) 
(?: 
     \s* 
     (?: \1 | \r? \n) 
     \s*  
     [1-9] [0-9]* 
)+ 
\s* 
$ 
+0

非常感謝真正的天才!使用製表符作爲此解決方案的分隔符會遇到任何問題嗎? – justinpees

+1

哦,選項卡,空格,點或逗號將工作相同。 – sln

+0

另外,是否很難接受每行結尾處的分隔符?我發現空格可以添加到每行的末尾,所以我強調標籤也可以工作。但是,每行結尾處的單個逗號(或空格逗號)和點(或空格 - 點)怎麼樣?取決於使用哪個分隔符。我知道這可能會讓事情變得更復雜。告訴我,如果它太多了。 – justinpees

1
\s 

可能會幫助你EXPRES的開始錫永。

+0

我試過了,它似乎沒有工作。你可以自己測試一下。是否因爲我將空間設置爲分隔符? – justinpees

+0

你究竟想要驗證什麼? – aanthraxx

1

添加零個或多個空白你的正則表達式的前面:

^\s*<your regex here> 
相關問題