は、2つの文字列を持って考えて - ないあなたのコードでは、ファイルまたはJTextFieldのから読み取る:
s = "\<$foo$>";
p = "[^\\]?<\$[^\$]*\$>";
そして、あなたは文字列にパターンをマッチさせたいです。バックスラッシュ[^\\]?
が含まれていませんが、オプションであるかもしれない
- グループを、私がこれまで行ってきた何
。
<$
ドルは特殊正規表現として、バックスラッシュでマスクする必要があります。
- フリーダイヤルの別のドルを含まないグループ
[^\$]*
。
- ドルより大きい
\$>
のドル。再び:ドルのマスク。
foo-partまたはsomething_we_dont_care_whatにドル記号が含まれていても、>
の後ろには、ドメインの質問があります。私は思っていませんでした。
s.match (p);
trueまたはfalseを返す必要がありますが、問題はコードに取り込む方法です。問題は正規表現だけでなく、Java自体がバックスラッシュをマスキング文字として扱うことです。だから、あなたがそれらのそれぞれを倍増する必要があります。
p = "[^\\\\]?<\\$[^\\$]*\\$>";
テストケースがあまりにもあなたのコード内のリテラルテキストであれば、これはあまりにもそれに適用されます。
"\\<$foo$>".matches (p);
はそれらをしようとすると、多くの場合、良いアイデアです2つのJTextFieldを持つシンプルなGUI、またはプロパティファイルからパターンを読み取るコードを使用すると、Javaマスキングを省略できるツールがあれば、繰り返し再コンパイルする手間を省くことができます。
public class PM
{
public static void main (String args[])
{
String bad = "\\<$foo$>";
String good = "<$foo$>";
String p = "[^\\\\]?<\\$[^\\$]*\\$>";
System.out.println ("bad:\t" + bad.matches (p));
System.out.println ("good:\t" + good.matches (p));
}
}
実際に動作しないコードを表示します。 – bmargulies
stackoverflow実際の区切り文字は削除されましたが、$($)$の場合はデリミタとして認識されるべきではありません。 – Remiel
@ user1276405 - StackOverflowは何も削除しませんでした。マークアップが間違っています。 Markdownの "ヘルプ"を読んでください...あなたの質問を編集しているときに、そのオレンジ色の疑問符のアイコンを見てください。 –