Regex 当字符串被该字符分割时,如何忽略分割模式

Regex 当字符串被该字符分割时,如何忽略分割模式,regex,perl,Regex,Perl,首先,很抱歉我的英语和标题中令人困惑的描述 我的问题是我有多行自然短语,我想数一数其中包含的单词。我在Perl中提出了以下正则表达式: my @words = split /[ :,.;\s\/\t!"\n]+/, $_; 它的工作原理很好,只是当遇到像“U.S.a”这样的词时,它会将该词分成U、S和a,这是不需要的。我能做些什么来修复它?谢谢。我会根据空格进行拆分,但会从“单词”的开头和结尾删除任何非单词字符。那样的话,U.S.A.最终将成为U.S.A use strict; use war

首先,很抱歉我的英语和标题中令人困惑的描述

我的问题是我有多行自然短语,我想数一数其中包含的单词。我在Perl中提出了以下正则表达式:

my @words = split /[ :,.;\s\/\t!"\n]+/, $_;

它的工作原理很好,只是当遇到像“U.S.a”这样的词时,它会将该词分成U、S和a,这是不需要的。我能做些什么来修复它?谢谢。

我会根据空格进行拆分,但会从“单词”的开头和结尾删除任何非单词字符。那样的话,
U.S.A.
最终将成为
U.S.A

use strict;
use warnings;

local $_ = 'hello world, U.S.A., and other places.';

my @words = map { s/^\W+|\W+$//g; $_ } split /\s+/, $_;

use Data::Dump;
dd \@words;
输出

["hello", "world", "U.S.A", "and", "other", "places"]

U.S.A
的预期输出是什么?它应该保持像U.S.A一样,没有任何变化显示像“www.google.com”这样的域名?是否应将其拆分为“www”、“google”、“com”?您不希望拆分单个字母单词。对吗?不,我不想分割。谢谢你,米勒,它似乎有效,除了在全局匹配器前面应该有一个“/”之外。顺便说一句,什么会被匹配\w,像I'm或'U.S.A'这样的单词似乎会被匹配为一个完整的单词,它的规则是什么?\w是一个非单词字符。粗略地说是[^ a-zA-Z0-9]。有关详细说明,请访问。只需搜索“角色类和其他特殊转义”