0

たとえば、perl の 1 つの正規表現で 2 つの形式の html 要素名を抽出できるようにしようとしています。

document.all. 要素名.

そしてまた

document.all[" ElemName "].

この

document.all[' ElemName '].

そして、私はElemNameを取得する必要があります.1つの操作しかキャプチャできません.1つの正規表現で抽出することは可能ですか? これは私が持っているものです:

document.all[\.\w|\[](\w+) 

最初の例のみをキャプチャする

4

3 に答える 3

1

Perl v5.10 以降で利用可能な名前付きキャプチャを使用できます。

#!/usr/bin/env perl
use strict;
use warnings;

my @array = qw{
    document.all.ElemName1.
    document.all["ElemName2"].
    document.all['ElemName3'].
};

for (@array) {
    /
        \b
        document\.all
        (?:
            \.(?<elem>\w+)
            | \["(?<elem>\w+)"\]
            | \['(?<elem>\w+)'\]
        )
        \.
    /x;

    print $+{elem}, "\n";
}
于 2013-01-14T14:16:11.240 に答える
1

ElemNameこれは、最初のキャプチャ グループの3 つのケースすべてに一致します。

document\.all\.?(?:\[["'])?(\w+)(?:['"]\])?

ここでデモ。

于 2013-01-14T14:43:25.653 に答える
0

一重引用符と二重引用符を含む文字クラスを使用して、引用符に一致させることができます。

$a = 'document.all.Element["ElemNamea"]';
$b = "document.all.Element['ElemNameb']";
print "a : $a\n";
print "b : $b\n\n";

$a =~ /document.all.Element\[['"](\w+)['"]\]/;  # ["'] matches ' or "
print "result: $a and $1\n";                    # result is in $1
$b =~ /document.all.Element\[['"](\w+)['"]\]/;
print "result: $b and $1\n";

出力:

a : document.all.Element["ElemNamea"]
b : document.all.Element['ElemNameb']

result: document.all.Element["ElemNamea"] and ElemNamea
result: document.all.Element['ElemNameb'] and ElemNameb
于 2013-01-14T14:43:16.317 に答える