次の問題に取り組んでいます: http://regexone.com/example/6 ?
正規表現を使用して最初の括弧をキャプチャできないことがわかりました。これはこれまでの私の正規表現です:at (\w+).(\w+)\.(\w+)
これは、正規表現が処理する必要があるサンプル行です。at widget.List.makeView(ListView.java:1727)
次の問題に取り組んでいます: http://regexone.com/example/6 ?
正規表現を使用して最初の括弧をキャプチャできないことがわかりました。これはこれまでの私の正規表現です:at (\w+).(\w+)\.(\w+)
これは、正規表現が処理する必要があるサンプル行です。at widget.List.makeView(ListView.java:1727)
いくつかの括弧の間のすべてをキャプチャするには、括弧を含めます。
(\(.*?\))
。これにより、たとえば、「(ListView.java:1727)」がキャプチャグループ1に配置されます。これは、正規表現のフレーバーに応じて、として参照できます\1
。
したがって、(\(.*?\))
\ 1を介してアクセスできる'(ListView.java:1727)'になります。
括弧内を一致させたいが、キャプチャの一部として括弧自体をキャプチャしたくない場合は、次のようにすることができます \((.*?)\)
。これで、\1は「ListView.java:1727」になります。
括弧内に個別のものを入れたい場合は、のようなことを行うことができます\((.*?):(.*?)\)
。これにより、\ 1は「ListView.java」になり、\2は「1727」になります。
それは役に立ちますか?
実際に機能する正規表現を提供するだけで、実際に何かを学ぶことができるかどうかはわかりませんが、次のようになります。
at [^\.]+\.[^\.]+\.([^\.]+)\((.+):(\d+)\)
またはもう少し単純です:
at \w+\.\w+\.(\w+)\((\w+\.\w+):(\d+)\)
使った
.*\..*\.(\w+)\((\w+\.\w+):(\d+)\)
私はそれをもう少し一般的にします。
/at ([\w.]+)\(([^:]+):(\d+))
メモリ キャプチャは次のとおりです。