2017-02-13 2 views
-2

有効な(ユーザー定義の)式を認識するためのプログラムを作成していますが、特定の文字が一致する回数を一致させる必要がありますもう一つの部分。たとえば、それが有効であるためには、pは(ダッシュの任意の数のため)●後にダッシュの数と一致する必要があります前に、私はJava正規表現の一致回数string内にsubstring/charが表示される

(some number of dashes)p-q(some number of dashes) 

で、ダッシュの数をPQシステムを使用している場合表現。

私はこの堅牢で一般化可能な(ユーザ定義のルールではなく、*を使うことができます.qの後にダッシュの量を2倍にするようにすることができます)いくつかの特別なテキストを追加することを考えています((%%n%%)のようなものは、正確に 'n'回現われなければなりません)。しかし、私がする前には、正規表現の能力がある/合理的に単純な修正か、私の%%の?

ありがとうございます。確認するために、再び私の問題を見て、言葉に良い方法は、私は基本的に2つ(あるいはそれ以上)をマークする方法を把握する必要があること、それをある部分文字列(一般的な方法で)その彼らは:


編集一致。私はどのように(正規表現に限定されているわけではない)柔軟性をある程度持っていますが、システムの残りの部分は正規表現を使用しているので、動作させるためには、理想的である。

+0

質問をよく説明するために編集しました – Aturf

答えて

0

私はあなたの問題が正しい場合、非正規文法によって生成された文字列をキャッチしようとしているので、正規表現では不十分です。いくつかの簡単なpushdown automatonはここで助けてください。

+0

質問を更新しましたが、回答が編集で更新されるかどうかはわかりません。私は、正規表現に「有効な式」が何であるかを定義するだけではなく、式を解析するのに役立つJavaライブラリを本質的にすべて持っています( "ohの代わりに" %% word %% 'いくつかの対応する所定の定数 ")。私はそれが役立つかどうかは分かりませんが、私は間違いなくリンクを見ていますので、本当にありがとう! – Aturf

0

ユーザが前後の数を選択できるようにする場合は、 正規表現は簡単です。

一般的に、これは前後に可変正規表現を構築する方法です。

(-{1,10}) # (1) 
p-q 
\1   # Backreference to capture group 1 

あなたが動的に文字列を作成したい場合は、それはまた、あなたは変更することができ、この
"(-{1," + vNum + "})p-q\\1{" + nFactor + }"

のように、バックエンドに数量詞を追加することができ
"(-{1," + vNum + "})p-q\\1"
このようなものになるだろうあなたが必要とするものを得るための数値限定子の形式{2}、または範囲{1,3}など...

キャプチャグループには、バックエンドで期待するもののサブセットが含まれています。

関連する問題