Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php preg regex-多行模式下不带换行符的WhitSpace组_Php_Regex_Preg Match All - Fatal编程技术网

php preg regex-多行模式下不带换行符的WhitSpace组

php preg regex-多行模式下不带换行符的WhitSpace组,php,regex,preg-match-all,Php,Regex,Preg Match All,您好,我正在尝试按行分割一些输入,并在每行上使用trim()。但是我想不使用trim,只使用regex 我遇到的问题是,行末尾的空格没有被修剪掉。我猜我的组[^$\s]空白,但没有换行符不起作用 所以问题是,如何解决我的问题,以及如何在preg regex中定义一个组,它明确表示忽略换行符?目前我认为我的方法仍然是错误的。问题是,如果我写\s*而不是这个奇怪的组..+吃光一切。如果我写?我没有得到包含空格的字符串返回完整 preg_match_all("/^\s*+(.+)[^$\s]*+$/m

您好,我正在尝试按行分割一些输入,并在每行上使用trim()。但是我想不使用trim,只使用regex

我遇到的问题是,行末尾的空格没有被修剪掉。我猜我的组[^$\s]空白,但没有换行符不起作用

所以问题是,如何解决我的问题,以及如何在preg regex中定义一个组,它明确表示忽略换行符?目前我认为我的方法仍然是错误的。问题是,如果我写\s*而不是这个奇怪的组..+吃光一切。如果我写?我没有得到包含空格的字符串返回完整

preg_match_all("/^\s*+(.+)[^$\s]*+$/m", $_POST['input'], $matches, PREG_SET_ORDER );

好的,我通常完全支持使用正则表达式。但是
trim
方法在这里更简单。我假设你避免了它,因为它通常需要一个额外的循环。但在这种情况下,您可以将其压缩为:

 $lines = array_map("trim", explode("\n", $_POST["input"]));
 // quite a handy utility function, so just wanted to note that here
但作为找到的解决方案的替代方案,您可以使用:

preg_split('/((?!\n)\p{Z})*\n((?!\n)\p{Z})*/u', "...\n...");
现在有点老土了。仅为
\n
交换了
^$
,并使用断言排除其他地方的换行符。但是
\p{Z}
是捕获所有Unicode空格字符变体的一个很好的替代方法,包括NBSP和其他ninja占位符

preg_match_all("/\s*(.*\S)/", $_POST['input'], $matches, PREG_SET_ORDER );
在捕获组之前,您需要吃一些东西,包括整行<代码>\s*会这样做。您不需要强制它从一行的开头开始,您也不会保存它——它的唯一目的是匹配一个非空白字符之前的

现在您知道您正在查看非空白,并且需要捕获同一行上的最后一个非空白。由于
与换行符不匹配,
*\S
就是这样做的

与您的版本的一个区别是,下一个匹配的初始
\s*
会吃掉您刚刚匹配的行上的尾随空格。因为我们不再关心行尾,所以不再需要
/m
修饰符


你可以使第一颗星具有所有格(
\s*+
);这不会改变它所匹配的内容,但是如果有一条长长的空尾巴,它将使它在文件末尾失败的速度稍微加快

真是个奇迹。这样我就解决了/^\s*+(.+?)\s*$/mYeah,让
+?
少点贪婪吧。但是你为什么要避免修剪?我想修剪线条,否则无论如何都太容易了。与修剪的一个区别是,你完全跳过了纯空白的线条,而修剪会给你空字符串。