簡體   English   中英

Perl:從字符串中提取不同的模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM