我对字符串$ text
执行了以下操作$text =~ tr/a-zåàâäæçéèêëîïôöœßùûüÿA-ZÅÀÂÄÆÇÉÈÊËÎÏÔÖŒÙÛÜŸ'()\-,.?!:;/\n/cs;
这样做是为了在换行符中拆分字符串。这就是我想要做的事情
但我不明白为什么会这样做?
我认为这条线路会占用所有字符a-zåàâäæçéèêëîïôöœßùûüÿA-ZÅÀÂÄÆÇÉÈÊËÎÏÔÖŒÙÛÜŸ'() - ,。?!:;并用\ n
替换每一个我不知道cs到底是做什么的。 Here你可以得到cs的解释,但我不明白这意味着什么:
“c - 用于指定SEARCHLIST字符集 可补“
“s - 用于指定字符序列 音译到同一个角色被压缩成一个单一的 字符“
的实例
示例:
$text= "a ar? å ..";
给出
a
AR?
å
..
答案 0 :(得分:5)
c - 用于指定SEARCHLIST字符集是否已补充
在这种用法中,"complemented"类似于“否定”或“反转”,因此不会替换表达式中列出的字符,而是替换表达式中找到的每个字符不。在您的示例字符串中,这意味着所有空格都替换为换行符,因为每个其他字符都包含在集合中。
答案 1 :(得分:4)
如果您想将所有空格转换为换行符,列出所有 not 空格的内容很麻烦,您可能会忘记一些空格。您可以使用正则表达式直接在空格上工作。
s{\s+}{\n}g;
s{...}{...}
是使用正则表达式而不仅仅是字符的“搜索和替换”。 \s
是正则表达式代表“空白”,包括空格,制表符和换行符。 +
表示匹配其中的一个或多个,因此一行中的多个空格将变为一个换行符。 g
修饰符表示“全局”或跨越字符串中的每个字符,否则它将在第一个匹配时停止。
foo bar baz
变为
foo
bar
baz
答案 2 :(得分:3)
“c - 用于指定SEARCHLIST字符集被补充”
这意味着它会使用\n
替换搜索列表中的任何不。在您的示例中,不在搜索列表中的唯一字符是空格。因此,每个空格都会被换行替换。作为Schwern pointed out,这不是一个很好的方法。
“s - 用于指定音译到同一个字符的字符序列被压缩为单个字符实例”
这意味着如果一行中有三个字符被翻译(导致一行中有三个\n
),则三个\n
将被“压缩”为一个\n
。如果您在示例输入中添加了一些空格,则可以看到此操作:
# Multiple spaces separating words
my $str = "a ar? å";
不挤压:
$str =~ tr/a-zåàâäæçéèêëîïôöœßùûüÿA-ZÅÀÂÄÆÇÉÈÊËÎÏÔÖŒÙÛÜŸ'()\-,.?!:;/\n/c;
输出:
a
ar?
å
挤压:
$str =~ tr/a-zåàâäæçéèêëîïôöœßùûüÿA-ZÅÀÂÄÆÇÉÈÊËÎÏÔÖŒÙÛÜŸ'()\-,.?!:;/\n/cs;
输出:
a
ar?
å