1

私が要求すると言う

parent/child/child/page-name

私のブラウザで。ページ名だけでなく、親、子も抽出したい。これが私が現在使用している正規表現です。URLリクエストに含まれる子の数に制限はありません。当面の間、ページ名は常に最後になり、省略されることはありません。

^([\w-]{1,}){1} -> Match parent (returns 'parent')
(/(?:(?!/).)*[a-z]){1,}/ -> Match children (returns /child/child/)
[\w-]{1,}(?!.*[\w-]{1,}) -> Match page name (returns 'page-name')

これで遊ぶほど、このソリューションがいかに不格好であるかを感じます。これは、ASPクラシックで開発している小さなCMS用です(:()。MVCルーティングパスのようなものです。ただし、URL要求に基づいてコントローラーと関数を呼び出す代わりに、階層を下って移動し、データベース内の適切なページ。データベースはネストされたセットモデルを使用しており、子ごとに一意のページ名でリンクされています。

分割関数を使用して/区切り文字で分割しようとしましたが、ネストされているため、非常に多くの分割ステートメントが一緒になっていて、非常に読みにくくなっていることがわかりました。

とにかく、文字列から親、子、およびページ名を解析する効率的な方法が必要です。誰かが別の解決策を提供してもらえますか?

正直なところ、正規表現が私の問題の最善の解決策であるかどうかさえわかりません。

ありがとうございました。

4

1 に答える 1

3

あなたは使用してみることができます:

^([\w-]+)(/.*/)([\w-]+)$

次に、 を使用して作成された 3 つの一致するグループにアクセスしMatch.SubMatchesます。詳しくはこちらをご覧ください。

編集

[\w-]実際、部品の名前で使用されているのはそれだけであることがわかっていると仮定すると^([\w-]+)(.*)([\w-]+)$、代わりに使用でき、子なしの場合もそれ自体でうまく処理されます。

于 2010-06-18T19:05:27.757 に答える