English 中文(简体)
在浮标之初,在Perl发生碎裂时用碎块进行铺设
原标题:Splitting string with regexp in Perl when delimeter appears in the beginning of the string

我想用<常规词语分拨一个插座,但我已经遇到一些问题。 我有这样的说明:

$text=" one two three";

Then I try to split it into alphabetic words:

#@words=split(" ", $text);          #1 this works

@words=split("[^a-zA-Z]", $text);   #2 this doesn t work

for $word (@words){
    printf "word: |$word|
";
}

So the commented method(1) works fine. As expected I get printed:

word: |one|
word: |two|
word: |three|

However with the second method(2) I get this:

word: ||
word: |one|
word: |two|
word: |three|

So although logically the second method should be equivalent to the first one, in practice it doesn t behave the same way. Why is that?

最佳回答

This is a special case in Perl s split() function.

As stated in perldoc:

<代码>split(/PATTERN/,utilr, [limit]>

If PATTERN is omitted, [it] splits on whitespace (after skipping any leading whitespace).

Empty leading fields are produced when there are positive-width matches at the beginning of the string; [...]

As a special case, specifying a PATTERN of space ( ) will split on white space just as split with no arguments does. Thus, split( ) can be used to emulate awk s default behavior, whereas split(/ /) will give you as many initial null fields (empty string) as there are leading spaces.

问题回答

暂无回答




相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签