2015-12-12 90 views
0

我找到了解決方案,如何使用正則表達式切割文本。正則表達式獲得第n個字符忽略空間

^(?=((?:.*?\S){40})) // GET FIRST 40 CHARACTERS (IGNORING SPACES) 

弗朗:Extract n-character substring while ignoring spaces

的問題是,如果我進入了這個:asdgfhtjshhhhhhhhhasdasdasdass asd,什麼也沒有提取。

這裏是regex101鏈接:https://regex101.com/r/fM9lY3/5#javascript

+0

通過標題來看,我想你只需要'^(?:\ S * \ S){40}'。 –

+0

@stribizhev似乎OP不想匹配空格! – Kasramvd

+0

然後問題不清楚。 MBC。 –

回答

0

這是因爲{} 40意味着正是 40,和你輸入的文本少於40個字符。與{1,40}嘗試(這意味着從1到40):

^(?=((?:.*?\S){1,40})) 
1

你可以簡單地使用正則表達式如下:

^(\s*\S){1,40} 

你不需要一個前向斷言,你可以簡單地將零個或多個空格字符和一個非空格字符放入捕獲組中。然後尾隨量詞將確保它發生多達40次。這裏的關鍵是可選的空間。

試試:https://regex101.com/r/fM9lY3/40

0

這一個讓正則表達式的只是一個小的使用,但它的工作原理

$x = "asdgfhtjshhhhhhhhhasdasdasdass asd"; 

$result = substr(implode("", preg_split('/\s+/', $x)), 0, 40);