2016-07-27 16 views
1

這裏是我的測試正則表達式的選項IGNORECASE和SINGLELINE:不明白爲什麼正則表達式不與字符串的開始/結束標記工作

^\s*((?<test1>[-]?\d{0,10}.\d{3})(?<test2>\d)?(?<test3>\d)?){1,}$

和輸入數據:

 24426990.568 128364695.70706  -1288.460 

如果我省略^(行的比賽開始)和$(線的匹配端)

\s*((?<test1>[-]?\d{0,10}.\d{3})(?<test2>\d)?(?<test3>\d)?){1,}

然後一切完美。

爲什麼它不適用於字符串開始/結束標記(^/$)?

在此先感謝。

+0

請問,如果你改變它的工作,*到*? – BugFinder

+0

這個正則表達式正確地與字符串不匹配,因爲在第一個位置只有一個空格檢查,但字符串內有空格。 –

+0

@ Sebastian Proske:呃,它不是常識的空間,而是缺少數字。確切的格式應該是類似於128364695.70706358364695.12346,沒有空格。 – Sharov

回答

2

The start and end is literally the start and end of the input string when in single line mode. It only means the start of the line and the end of the line in multiline mode.

請注意,這意味着整個輸入字符串。

所以如果你使用:

 24426990.568 128364695.70706  -1288.460 

爲您的輸入字符串,然後開始就是第一空白和字符串的結尾將是0

當你的模式完全匹配一個實例當你使用^和$時,你所尋找的正則表達式會失敗。這是因爲它正在輸入字符串中查找該模式的一個實例,但有三個。 你有兩個選擇:

  1. 刪除^和$
  2. 更改要匹配的模式至少一次
+0

好的,我在最後人爲地添加了一些空格,但仍然沒有匹配。 – Sharov

+1

@Sharov空格不是問題,它是單行模式中^和$的含義,如上所述;你明白我的答案嗎?如果沒有,讓我知道什麼是沒有意義的,我會編輯 –

+0

對不起,但我仍然無法得到它。好的,^從一開始就拿一個空格,$得到最後一個0.作爲一個測試,我追加了三個空格,它應該可以工作。但事實並非如此。 – Sharov

相關問題