2016-12-08 12 views
1

後に文字を選択するために、正規表現を使用して、私は#まで(包括的)/後のすべてをキャプチャしようとしている正規表現/包括キャプチャし

[/].([a-z/[email protected]$%^&*()-+><~*\.]+) 

を持っていますか? (排他的)。

私は上の正規表現を試してみました弦:

/hello.there#test適切にちょうど/グループ何もないしかし、それをしようとしてくれ/hello.there

を与えます。文字列/ hには何もグループ化されません。私はキャプチャするためにセットにa-zを含めたので、それを行うと思った。

どのように正規表現を改良して、#と?を除いた後に/をすべて取り込むようにすることができますか? #と?の後に何も無視していますか?

あなたは

+0

'(\/[^#\?] +) '? – Alex

+1

regexについて質問をするときは、使用する言語またはツールのタグを追加してください。 –

+0

それについて申し訳ありません....あなたが私に与えた正規表現は、文字列 "/#test"では/ onlyを取るべき場所では動作しません – nelac123

答えて

2

あなたには、いくつかの他の文字以外の文字を一致させる必要があり、あなたが否定文字クラスを考える必要がありますありがとうございました。

#?以外の任意の文字に一致するには、[^#?]を使用してください。ゼロ個以上の一致を一致させるには、その後に*を追加します。

/([^#?]*) 

regex demo

Java demoを参照してください使用します。

String str = "/hello.there#test"; 
Pattern ptrn = Pattern.compile("/([^#?]*)"); 
Matcher matcher = ptrn.matcher(str); 
if (matcher.find()) { 
    System.out.println(matcher.group()); // => /hello.there 
    System.out.println(matcher.group(1)); // => hello.there 
} 
+1

ありがとう!これは完全に動作しています – nelac123

2

あなただけ#?後の文字を無視したい場合は、直接それらを除外します。あなたはそれをキャプチャすることができ、かつ[^#?]#?を除くすべての文字が含まれるように、この正規表現で

(/[^#?]*) 

/はグループである。(もちろん、それらの後に任意の文字は無視されます)

+0

'Matcher.group()'(または 'Matcher.group(0)')を通して常にマッチ全体にアクセスできるので、パターン全体をキャプチャすることはJavaでは冗長です。 –

+0

@WiktorStribiżewああ、彼はJavaタグを使いました。私はそれを逃しました。通知ありがとうございます。 –

関連する問題