3

Android シェル (Busybox を使用) を使用していくつかの .xml ファイルをスキャンして情報を抽出するスクリプトを作成しようとしていますが、いくつかの最適化に行き詰まっています。

たとえば、

(ax)b

に一致

axbxc

そうではありません。Androidでこれを実行しようとすると(4.2.2、Busybox 1.20.2で、問題がある場合)。

echo axbxc > \sdcard\test.txt
grep "(ax)b" \sdcard\test.txt

何も返しませんが、

grep "axb" \sdcard\test.txt

予想通り、

axbxc

同様に、すべきではない

(?>ax)b

axbxc も返しますか? (これは私が適用したい実際の最適化です。)

この問題の原因は何ですか? さらに、Busybox が使用する正規表現エンジンを知っている人はいますか?

4

1 に答える 1

4

grep(およびbusybox grep)で拡張正規表現を有効にするには、を使用するか、(はのショートカット)を使用する必要grep -Eegrepありegrepますgrep -E

これを busybox grep でテストしましたが、どちらの方法も期待どおりに機能し、正規表現と一致します。

-これ(?>ax)bは、使用できる場合にのみ機能しますgrep -P(Perl 互換の正規表現のサポート)。ただし、busybox grep はこのスイッチをサポートしていないため、先読みと後読みの一致は機能しません。

于 2013-05-24T05:08:50.403 に答える