Dew*_*wBe 1 regex perl split substr
我有一个字符串称为($ date)我试图使用Perl分成两部分.
$date= (June 25, 2018–July 1, 2018)
Run Code Online (Sandbox Code Playgroud)
从我所看到的,似乎将这个字符串分成两个独立日期的正确方法是创建一个新数组,使用Perl split()函数和连字符作为分隔符,然后将数组索引值分配给我像这样的StartDate/EndDate变量......
@dates = split(/-/, $date);
$StartDate = @dates[0];
$EndDate = @dates[1];
print "Effective Date: ($date)\n";
print "($StartDate)";
print "\n";
print "($EndDate)";
Run Code Online (Sandbox Code Playgroud)
然而,这并不像我预期的那样有效.
请记住,上面的代码只是源代码的一小部分.
Current Output (Incorrect)
Effective Date: (June 25, 2018–July 1, 2018)
(June 25, 2018–July 1, 2018)
()
Run Code Online (Sandbox Code Playgroud)
预期输出(正确)
Effective Date: (June 25, 2018–July 1, 2018)
(June 25, 2018)
(July 1, 2018)
Run Code Online (Sandbox Code Playgroud)
寻找有关如何实现目标的任何建议.
这里的问题是你试图拆分-(U + 002D HYPHEN-MINUS),但你的字符串包含–(U + 2013 EN DASH).
有两种方法可以在正则表达式中指定此字符:
use utf8;
...
my ($StartDate, $EndDate) = split /–/, $date;
Run Code Online (Sandbox Code Playgroud)
use utf8 告诉perl你的源代码是UTF-8,所以你可以按字面意思使用Unicode字符.
my ($StartDate, $EndDate) = split /\x{2013}/, $date;
Run Code Online (Sandbox Code Playgroud)
或者您可以使用十六进制字符代码.
my ($StartDate, $EndDate) = split /\N{EN DASH}/, $date;
Run Code Online (Sandbox Code Playgroud)
或者命名的字符引用.
如果您不一定要拆分EN DASH而是任何类似破折号的字符,则可以使用基于"Dash"属性的字符类:
my ($StartDate, $EndDate) = split /\p{Dash}/, $date;
Run Code Online (Sandbox Code Playgroud)
请注意,@dates[0]将触发警告(如果use warnings已启用,它应该是),因为数组中的单个元素@foo拼写$foo[0]在Perl中.语法@array[ LIST ]用于数组切片,即通过索引提取多个元素.
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |