2013-01-25 31 views
3

我想嘗試構造一個RegEx語句,它將從字符串中刪除任何預先或尾隨的空格(但保留字符串中的任何內容不變),同時還匹配選擇的格式。例如,字符串的長度不能超過20個字符,可以包含a-zA-Z0-9中的任何字符以及下劃線和連字符。但最重要的是它必須修剪或忽略在開始或繩子,讓年底發現有任何空間:正則表達式 - 在匹配內容時刪除前後的空格

正確: 有「美好的一天」

不正確: 「有一個愉快的一天」

我已經嘗試了許多不同的方法來做到這一點,但不幸的是,迄今爲止,我還沒有能夠想出一個完全符合我想要的公式。任何人都可以通過合適的RegEx幫助我嗎? (這是RegEx的最簡單形式,而不是平臺特定的)。

+0

什麼技術? – sp00m

回答

0

它從你的例子看來,空間在字符串中間允許的,所以您可以嘗試一下匹配是正確的這一

^((([a-zA-Z0-9\-_][a-zA-Z0-9\-_ ]{0,18}?[a-zA-Z0-9\-_]))|([a-zA-Z0-9\-_]))$ 

什麼。

模式中的or部分用於支持單個字符句子。

+0

報價OP: - '字符串不能超過20個字符.. –

+0

謝謝你,修好了。 –

0

這應該滿足您的需求:

^\S[\w\s-]{0,18}\S$ 

18是字符串的maxlength - 2,因爲兩個\S將匹配任何非空白字符每個。例如,在這種情況下,如果字符串長度高於20個字符,字符串將不匹配。此外,由於上述約束相同,如果字符串長度低於2個字符,字符串將不匹配。

+1

你的匹配長度是[3,20],它是無證的限制 –

+0

@burning_LEGION你說得對,好點!我編輯過。 – sp00m

0

使用此正則表達式^\S((.{0,18}\S)|)$

^開始字符串的

\S非空格符號

(.{0,18}\S)?在端部的任何符號和非空間符號(0-19符號)

|

$端線的

4

查找這個模式:

^\s*(.*?)\s*$ 

這一個替換:

\1 
+0

它適合我。謝謝 –

0

下面是一個例子使用的sed

echo " Have a nice day "|sed -E "s/^ *([^ ]+.*[^ ]+) +$/\\1/" 
相關問題