Regex忽略空格获取前n个字符



我找到了一个如何使用正则表达式剪切文本的解决方案。

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

Fron:提取n个字符的子字符串,同时忽略空格

问题是,如果我输入以下内容:asdgfhtjshhhhhhhhhasdasdasdass asd,则没有提取任何内容。

以下是regex101链接:https://regex101.com/r/fM9lY3/5#javascript

您可以简单地使用以下正则表达式:

^(s*S){1,40}

您不需要前瞻性断言,只需将零个或多个空格字符和一个非空格字符放入捕获组即可。然后尾随量词将确保它最多出现40次。这里的关键是可选空间。

试试看:https://regex101.com/r/fM9lY3/40

这是因为{40}的意思是恰好40,并且您输入的文本少于40个字符。尝试使用{1,40}(意思是从1到40):

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

这个只使用了少量regex,但它可以

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

最新更新