2016-12-15 312 views
4

我想知道這個正則表達式是否正確,用於檢查字符串是否不以點開頭,是否以點結尾並至少包含一個點在任何地方,但不是開始或結束:正則表達式字符串不包含連續的2個點

我的問題是,我無法確定如何檢查是否有連續的2個點。

/^([^.])+([.])+.*([^.])$/

+0

使用該網站來測試你的正則表達式https://regex101.com/ – RaR

+0

這你使用的編程語言?有可能是更容易的解決方案.. – Kent

+0

*「我想知道這個正則表達式是否正確」* - 只有一種方法可以知道它是否正確(鑑於您沒有提及該程序或你想要使用它的語言):將它傳遞給目標程序,看看它是否做到了你想要的。 – axiac

回答

4

看來你需要使用

^[^.]+(?:\.[^.]+)+$ 

regex demo

詳細

  • ^ - 串的開始
  • [^.]+ - 比其他1+字符一個.(因此,第一個字符不能.
  • (?:\.[^.]+)+ - 1以上(因此,在字符串中的點是強制性出現在至少一次)的序列:
    • \. - 點
    • [^.]+ - 比. 1+字符另一個(+量詞使得比其它.炭至少出現一次船尾因此,使得不可能將字符串與2個點相匹配)
  • $ - 字符串結尾。
+0

將''[^。] +(?:\。{0,x} [^。] +)+ $'不能解決'必須有'。問題?其中x是最大連續點數? – user3012759

+0

@ user3012759:限制量詞在這裏是多餘的,因爲我們需要在兩個非'''符號之間匹配一次*。*。 –

+0

啊,是的,你是對的OP問至少有一個,所以是你的解決方案是完全正確的。 – user3012759

2

你靠近,有一試:

^[^.]+(?:\.[^.]+){2,}$ 

它maches有2個或更多點的字符串,而不是在開始時或結束。

如果你想要一個或多個點:

^[^.]+(?:\.[^.]+)+$ 

如果你想要一個或兩個點:

^[^.]+(?:\.[^.]+){1,2}$ 
相關問題