1

指定されたテキスト ブロックから URLのみを抽出するにはどうすればよいですか?

background(http://w1.sndcdn.com/f15ikDS9X_m.png)
background-image(http://w1.sndcdn.com/5ikDIlS9X_m.png)
background('http://w1.sndcdn.com/m1kDIl9X_m.png')
background-image('http://w1.sndcdn.com/fm15iIlS9X_m.png')
background("http://w1.sndcdn.com/fm15iklS9X_m.png")
background-image("http://w1.sndcdn.com/m5iIlS9X_m.png")

おそらく正規表現はうまくいくでしょうが、私はそれを解決するのに十分なほど進んでいません!

どうもありがとう!マイキー

4

3 に答える 3

4

あなたは問題を考えすぎています - あなたがする必要があるのは、単純な一致である URL を一致させることだけです:

rematch('\bhttps?:[^)''"]+',input)

これは、提供された入力に基づいて機能します。別の入力が使用されている場合は、微調整が必​​要になる場合があります。

\s(たとえば、それが要因である可能性がある場合は、必要に応じて char クラスに a を追加できます。)


正規表現自体は単純です:

\bhttps?:  ## look for http: or https: with no alphanumeric chars beforehand.

[^)'"]+    ## match characters that are NOT ) or ' or "
           ## match as many as possible, at least one required.

これが誤検知に一致する場合は、もちろん、これらのようなより洗練された URL 正規表現を探すことができます。

于 2012-12-01T15:15:18.677 に答える
2

デモ

background(?:-image)?\((["']?)(?<url>http.*)\1\)

説明:

  • background(?:-image)?-> background または background-image に一致します (グループ化なし)
  • \(-> リテラル括弧に一致
  • (["']?)' or " or VOID-> URLの前にある場合に一致します
  • (?<url>http.*)-> URLに一致
  • \1\)-> グループ化されたもの (この説明の 3 行目) に一致し、次にリテラルの括弧に一致します
于 2012-12-01T14:47:48.470 に答える
0

正規表現なしで答えが必要な場合は、このようなものが機能します。

YourString = "background(http://w1.sndcdn.com/f15ikDS9X_m.png)";
YourString = ListLast(YourString, "("); // yields http://w1.sndcdn.com/f15ikDS9X_m.png)
YourString = replace(YourString, ")", "");  // http://w1.sndcdn.com/f15ikDS9X_m.png

複数回実行しているので、関数にすることができます。また、一部の文字列に含まれる引用符を処理するために、他の置換コマンドが必要になる場合があります。

そうは言っても、正規表現を機能させる方が良いでしょう。

于 2012-12-01T15:27:02.073 に答える