-5

/豚/ラテン/

コンテキストはこちら: http://www.mysite.com/pig/latin/

/pig/latin/ または /pig/latin/is/great を含む値を取得しました

豚の部分だけが必要です。これはどのように行われますか?パターンについても少し説明していただけますか

4

3 に答える 3

1

小文字のみを想定すると、これで最初の部分が提供されます。

^/([a-z]+)/.*
  • 角括弧は文字クラスを作成し、a から z までの範囲の文字が許可されます。
  • その後の + は、このクラスのインスタンスが 1 つ以上存在する必要があることを意味します。
  • 括弧で囲まれているのは、「このグループをキャプチャする」という意味です。つまり、これは返したいビットです。
  • スラッシュは文字通りのスラッシュであり、正規表現を文字列に配置するのに役立ちます。
  • 末尾のドットは任意の文字を意味し、その後の星印は前の式の 0 個以上を意味します...つまり、任意の文字の 0 個以上を意味します。
  • 先頭の ^ は、正規表現を文字列の先頭に固定します...したがって、この文字列が先頭だけでなく文字列内のどこにでも出現する可能性がある場合は、そのビットを削除する必要があります。

プログラミング言語によっては、式の開始と終了を示す何らかの区切り文字も必要になる可能性があります。

小文字に加えて文字が必要な場合は、それらを文字クラスに追加します。たとえば、^/([a-zA-Z0-9]+)/.*大文字と数字も許可されます。

于 2013-03-29T15:08:13.210 に答える
1

/ で始まる文字列の最初の部分と一致するように一致し、次の / までコンテンツをヤンクすると仮定すると、これは機能するはずです

^/([^/]++)/.*+$

Java での概念実証

public static void main(String[] args) {
    final String s = "/pig/latin/";
    final Pattern p = Pattern.compile("^/([^/]++)/.*+$");
    final Matcher m = p.matcher(s);
    m.find();
    System.out.println(m.group(1));
}

出力

pig

他の言語では、スラッシュをエスケープする必要がある場合があります。

于 2013-03-29T15:08:59.323 に答える
1

これは、質問にキャッチがないと仮定すると、スラッシュの間にあるテキストの最初のインスタンスと一致する必要があります。

(?<=\/)[^\/]+(?=\/)

正規表現パーサーは文字列内で左から右に移動する必要があり、指定されたパターンのすべてのインスタンスに一致するフラグがないと仮定すると、最初のインスタンスのみに一致します。先読み(?<=...)および後読み(?=...)の表記は、指定された文字に一致しますが、一致したグループには返されません。の文字クラスの一致は、を除く[^\/]+任意の文字の 1 つ以上のインスタンスと一致します。 /

于 2013-03-29T15:02:52.643 に答える