2014-01-30 33 views
2

我想,以確保一個字符串包含線之間0和3的號碼,並對於給定的行存在,它包含0到100個字符。它需要成爲JavaScript和Java的有效表達式。像許多人一樣,我正在從互聯網上的各個地點複製RegEx。正則表達式匹配行數和字符每

反向工作我認爲^.{0,100}$讓我的「行包含0到100個字符」,但試圖將它分組爲(^.{0,100}$){0,3}不起作用。

新行字符可能是我的問題的一部分,所以我最終得到了類似於.{0,100}(?:\n.{0,100}){0,2}這樣的內容,試圖說「一行0到100個字符,可選地跟一個新行的0到2個實例,0到100個人物「,但也失敗了。

到現在爲止,我從其他人的表情。使用在線測試工具,我終於將它們一起猴子化:^.{0,100}(?:(?:\r\n|[\r\n]).{0,100}){0,2}$似乎工作。

所以,我的問題是,我失去了在^.{0,100}(?:(?:\r\n|[\r\n]).{0,100}){0,2}$任何缺陷給我後?而且,即使這樣做有效,它也是最好的表達方式嗎?

回答

3

我覺得你有什麼將正常工作。您可以使線斷裂部稍微更緊湊,如果你想要的,你不需要^$如果您正在使用matches()

String regex = ".{0,100}(?:[\r\n]+.{0,100}){0,2}"; 

編輯

經過一些思考,我意識到上面的換行符可以匹配4條(或更多)行,只要其中有幾條是空的。所以,我們回到你的建議例子。哦,至少可以省略開始和結束字符。

String regex = ".{0,100}(?:(?:\r\n|[\r\n]).{0,100}){0,2}"; 
+0

我同意你的看法,我可以刪除它們,但我需要說明的是,我只能configue一個字符串。然後我使用的SDK將生成JS以及在兩個地方使用相同模式的Java代碼。我很確定,當我刪除錨時,它開始在JS端失敗。 –

1

我不是很擅長正則表達式,但會工作嗎?

^.{0,100}\n?(.{0,100}\n)?.{0,100}?$ 

再一次,我還是新的reg exp,所以如果有一個錯誤(這可能)請告訴我。

+0

我認爲如果字符存在,就需要換行符。只是意味着它看起來像'\ n'是可選字符串的一部分,而不是可選字符串的一部分。因此沒有新線的單線會錯誤地使比賽失敗。 –

+0

啊!你是對的。現在編輯。 –

+0

另外,我認爲,'\ N'將JS工作,但不是Java。至少我認爲我得到了一個Java問題,直到我添加了'\ r'支持。感謝你留在這裏。我非常感謝你的努力! –