1

-> background-image:url(/assets/test.jpg)のような文字列の画像パスの読み取りに問題があります

ブラケット自体なしでブラケットの内側にストリングを入れたいです。

使用したコードは次のとおりです。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\bbackground-image:url\(.*\)\\b" options:NSRegularExpressionCaseInsensitive error:nil];

        thumbnail = [regex stringByReplacingMatchesInString:thumbnail options:0 range:NSMakeRange(0, [thumbnail length]) withTemplate:@"$1"];

私が得るものは(/assets/test.jpg)です

4

2 に答える 2

3

次のパターンを使用して、期待される結果を取得します。

background-image:url\\((.*)\\)

コードに適用:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"background-image:url\\((.*)\\)" options:NSRegularExpressionCaseInsensitive error:nil];

これを使用すると、希望どおりの結果が「/assets/test.jpg」になります。

コードは、「\(」の不明なエスケープシーケンスに関する警告を表示するはずです。「(」をエスケープするには、「\\(」を使用する必要があります。また、先頭と末尾の「\\b」を削除してください。あなたのパターン。

ただし、このパターンは、文字列に「background-image:url(somevaluehere)」のみが含まれている場合にのみ機能することに注意してください。

編集:

\\ bはどういう意味ですか?

\\ bは単語の境界であり、通常は\bとして表されます。NSStringでは、実際の円記号として扱われるように\をエスケープする必要があるため、\\bを記述する必要があります。

ここに、どの単語境界が一致するかに関するいくつかの情報があります。

単語の境界として適格な3つの異なる位置があります。

  • 文字列の最初の文字の前。最初の文字が単語文字の場合。
  • 文字列の最後の文字の後、最後の文字が単語文字の場合。
  • 文字列内の2つの文字の間。一方は単語文字で、もう一方は単語文字ではありません。

簡単に言うと、\ bを使用すると、\ bword\bの形式の正規表現を使用して「単語全体のみ」の検索を実行できます。「単語文字」とは、単語を形成するために使用できる文字です。「単語文字」ではないすべての文字は「非単語文字」です。

http://www.regular-expressions.info/wordboundaries.htmlから取得

これがこれを少し明確にすることを願っています。

于 2012-05-09T09:20:24.783 に答える
0

正規表現をに変更する必要があると思います\\bbackground-image:url\((.*)\)\\b。必要な一致をキャプチャするために、。*の周りに()を追加しました。

于 2012-05-09T09:20:36.457 に答える