【发布时间】:2015-05-05 08:02:50
【问题描述】:
我有以下结构的行:
STRING1 space STRING2 space FREETEXT
STRING1 和 STRING2 都可能是:
- "space* slash space*"
\s*/\s*分隔的单词,例如word1 / word2 / word3。 -
或一个单字。正则表达式:
\w+ -
FREETEXT是任何字符串...(.*)
我知道如何匹配:
* one word such `\w+`
* two delimited words: `\w+\s*/\s*\w+'
但不知道如何匹配由\s*/\s* 分隔的“1 个或更多”字,例如类似/(\w+(\s*/\s*)?)/
也许更容易理解的定义:
line: string space string space freetext;
string: \w+
||
string \s*/\s* \w+
space: \s+
freetext: .*
需要获得所有 3 个部分,例如以下代码
use 5.014;
use warnings;
my $slash_string = qr(\w+|\w+\s*/\s*); #<- help1 here
while(<DATA>) {
if( m{^($slash_string)+\s+($slash_string)+\s+(.*)$} ) { #<- help2 here
say join ' | ', $1, $2, $3;
}
}
__DATA__
magnam est dolorem ea est
non / ipsum harum asperiores nesciunt voluptatem
nunt / harum / dicta nisi minus quo similique unde
porro inventore / repudiandae dolorem ipsum
enim ipsam / aut / numquam illum vero eveniet
natus / voluptas aut / deserunt et nisi sequi est
sed / quam / magni ex / assumenda / et eaque cum et modi
应该产生想要的输出
magnam | est | dolorem ea est
non / ipsum | harum | asperiores nesciunt voluptatem
nunt / harum / dicta | nisi | minus quo similique unde
porro | inventore / repudiandae | dolorem ipsum
enim | ipsam / aut / numquam | illum vero eveniet
natus / voluptas | aut / deserunt | et nisi sequi est
sed / quam / magni | ex / assumenda / et | eaque cum et modi
【问题讨论】:
标签: perl