[英]Perl: Extract distinct patterns from a string
我想根據長字符串中a[az]
提取模式,並僅輸出不同的值。 例如,對於$x
的以下字符串
perl -e "$x = 'abx1acy2acz3ab'";
結果應該是:
AB
AC
問題:沒有規則將記錄/字符串拆分為數組,這樣可以輕松提取模式。
如果您想要唯一數據,請考慮使用哈希。
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
$_ = 'abx1acy2acz3ab';
my %seen;
for (/(a[a-z])/g) {
say $_ unless $seen{$_}++;
}
您將通過此正則表達式獲得不同的模式(如果您不關心他們的順序):
(a[a-z])(?!.*\1)
說明:
(a[az])
- 匹配字母a
后跟范圍az
任何其他字母。 內容在第1組中捕獲 (?!.*\\1)
- 負向預測,以確保字符串后面不存在組1的內容。 另一個Perl單線
$ perl -le ' $x="abx1acy2acz3ab" ;%kv=$x=~/(a[a-z])((?<=.))/g; $,="\n"; print keys %kv '
ac
ab
$
與另一個輸入:
$ perl -le ' $x="abxaxy2acz3ab" ; %kv=$x=~/(a[a-z])((?<=.))/g; $,="\n"; print keys %kv '
ax
ab
ac
$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.