2

私は動作するこの正規表現を書きましたが、正直なところ、75% は当て推量です。

目標は次のとおりです。次のように、Xcode に多くのインポートがあります。

#import <UIKit/UIKit.h>
#import "NSString+MultilineFontSize.h"

を含むカテゴリのみを返したいです+。ソース全体には+、他のコンテキストに含まれる多くのコード行もあります。

現在、これは Xcode プロジェクト全体の適切な行をすべて返します。しかし、スタック オーバーフローで正規表現のチュートリアルをグーグル検索して検索することで学んだことが 1 つあるとすれば、それは、物事を行うさまざまな方法がたくさんあるということです。潜在的なスプーフィングやミスに関して、より効率的またはより確実なものにするために、皆さんが思いつくさまざまな方法をすべて見てみたいと思います.

^\#import+.[\"]*+.(?:(?!\+).)*+.*[\"]

ご協力いただきありがとうございます。

アップデート

また、スプーフィングの可能性を見逃すことなく、最短の文字列でこれを行う人の答えを受け入れると思います。しかし、繰り返しになりますが、この学習体験に参加してくれたすべての人に感謝します。

回答からのリソース

これは、Dan Rasmussen による正規表現を実践するための素晴らしいリソースです: RegExr

4

2 に答える 2

3

最初に気付いたのは、+文字の配置が間違っていることです: 1 回以上t+.一致し、その後に 1 つの文字が続きます。インポートの末尾に一致させたいと想定しており、その後に 1 つ以上の任意の文字が続きます。t.import.+

第二に、#エスケープする必要はありません。

これが私が思いついたものです:^#import\s+(.*\+.*)$

\s+は 1 つ以上の空白文字に一致するため、行が実際に で始まることが保証され#importます#importbutnotreally

私は xcode の構文に詳しくありませんが、式の次の部分 は、その中のどこかにある文字(.*\+.*)を含む任意の文字列に単純に一致します。これは、無効なインポートが一致する可能性があることを意味しますが、有効なコードを一致させようとしているという前提で作業しています。そうでない場合は、これを変更してインポーターの構文も検証する必要があります。+


PS 式をテストするには、RegExrを試してください。文字にカーソルを合わせると、その動作を確認できます。

于 2012-08-02T20:52:42.757 に答える
0
sed 's:^#import \(.*[+].*\):\1:' FILE

表示されます

"NSString+MultilineFontSize.h"

あなたのサンプルのために。

于 2012-08-02T21:12:29.953 に答える