2

我正在尝试制作一个正则表达式,它将匹配字符串中第一个空格之后(但不包括)的所有字符。

输入文本:

foo bar bacon

期望匹配:

bar bacon

到目前为止,我发现的最接近的是:

\s(.*)

但是,这与除“bar bacon”之外的第一个空格相匹配,这是不可取的。任何帮助表示赞赏。

4

4 回答 4

5

您可以使用积极的lookbehind

(?<=\s).*

演示

尽管看起来您已经.*在当前的正则表达式中放置了一个捕获组,所以您可以尝试抓住它。

于 2013-09-24T15:19:44.170 回答
3

我更喜欢使用[[:blank:]]它,因为它与换行符不匹配,以防万一我们以 mutli 为目标。它也兼容那些不支持\s.

(?<=[[:blank:]]).*
于 2013-09-24T15:32:58.837 回答
2

你不需要往后看。

my $str = 'now is the time';
# Non-greedily match up to the first space, and then get everything after in a group.
$str =~ /^.*? +(.+)/; 
my $right_of_space = $1; # Keep what is in the group in parens
print "[$right_of_space]\n";
于 2013-09-24T15:35:04.910 回答
1

你也可以试试这个

(?s)(?<=\S*\s+).*

或者

(?s)\S*\s+(.*)//group 1 has your match

With(?s) .也会匹配换行符

于 2013-09-24T15:21:10.833 回答