質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

3回答

3377閲覧

親階層のみの正規表現で一致させたい

h1klbtm

総合スコア7

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2020/08/21 02:56

以下のようなパスがあるとした場合、

/items/111 /items/111/123

/items/111 のみを抽出する際にどのように正規表現を当てるか考えております。

/items/[0-9]+

では両方とも対象になるかと思います。

条件

  • 末尾にアンカーやパラメータがつくことがあるので後方で一致が難しい
  • 数字部分の桁数は3桁とは限らない

[^/]など調べては見ましたがうまく行かない状態です。
上記ご教示くださいませ。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/08/21 03:01

えっと、「\/items\/[0-9]+」でも「/items/111/123」の一部である「/items/111 のみを抽出する」ことには成功するかと思うのですが、そういうことではないのでしょうか?
yambejp

2020/08/21 03:27

言語はなにを想定していますか? >末尾にアンカーやパラメータがつくことがある のサンプルを提示してください
guest

回答3

0

説明不足な感はありますが、「/items/111」や「/items/111?hoge=(略)」や「/items/111#fuga」のときは「/items/111」を抽出したいということですかね。

regex

1^/items/\d+(?=$|[?#])

投稿2020/08/21 03:07

編集2020/08/21 03:08
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

/items/111/123はマッチさせたくないのであれば、

/items/[0-9]+[^/] もしくは /items/[0-9]+$

投稿2020/08/21 03:07

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

^/items/[^/]+$で行けないでしょうか?

  • 文字列の先頭に一致するアンカー^と、文字列の末尾に一致するアンカー$で正規表現パターン全体をくくることで、このパターンが文字列の全体に一致しなければならないことを表します。
  • 否定の文字クラス[^/]はパスセパレータ以外の文字に一致することを表します。末尾アンカーと合わせて[^/]+$とすることで、『サブディレクトリ名が始まったらそれ以降は文字列の最後までパスセパレータが出てこない』という意味になります。

最初のトライアルでうまく行かなかったのは、末尾アンカーがなく部分一致でもマッチしてしまっていたためだと思います。

投稿2020/08/21 03:12

GlassGrass

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問