所以我的正则表达式是:
((('.*'),(\n)){2})
我的主题是
'Welcome',
'to',
'RegExr',
'to',
'sad',
所以我想得到
'Welcome','to',
'RegExr','to',
'sad',
我该怎么做?如果我只是写$2
,它会给我'to''to''sad'
,但不会'Welcome''to''RegExr''to''sad'
- 首先;第二个(我认为最重要的) - 如何访问{2}
这些主题中的每一个?
答案 0 :(得分:2)
您可以使用
\n(.*(?:\n|$))
并替换为$1
。如果在LF之前可以有CR,请使用
\r?\n(.*(?:\r?\n|$))
其中\r?\n
匹配可选的CR abd然后匹配LF。请注意,要匹配主要的三种换行符类型,您可以将\r?\n
替换为(?:\r\n?|\n)
。或者,如果支持\R
(任何换行符)构造:
\R(.*(?:\R|$))
请参阅regex demo
<强>详情:
\n
- 换行符(.*(?:\n|$))
- 第1组捕获除换行符之外的任何0 +字符(.*
),包括换行符或字符串结尾($
)。您可以使用正则表达式匹配5行like this:
'.*',(?:\r?\n'.*',){4}
然后在匹配评估器/回调函数(方法)中删除所有换行符。
查看PHP demo:
$s = "'text 1',\n'text 2',\n'text 3',\n'text 4',\n'text 5',\n'text 6',\n'text 7',\n'text 8',\n'text 9',\n'text 10',\n'MORE here'\n";
$lines_to_shrink = 5;
echo preg_replace_callback("~'.*',(?:\R'.*',){" . ($lines_to_shrink-1) . "}~", function($m) {
return str_replace(array("\n", "\r"), "", $m[0]);
}, $s);
输出:
'text 1','text 2','text 3','text 4','text 5',
'text 6','text 7','text 8','text 9','text 10',
'MORE here'