回答:
はい、できます。うまくいくはずです。
.
=任意の文字\.
=実際のドット文字.?
= .{0,1}
=任意の文字に0回または1回一致.*
= .{0,}
=任意の文字に0回以上一致.+
= .{1,}
=任意の文字に1回以上一致しますはい、動作し.
ますが、式のコンパイル時にDOTALLフラグを渡さない限り、は改行に一致しません。
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
改行にマッチすると思いました。あなたの答えを読んでよかった、それを使う必要がある!
{.,\n,\r,\u2028,\u2029,\u0085}
すべての文字を完全に一致させるために使用する必要がある場合があります(Unicode文字は.
、Javaでは一致しない追加された行末文字です)が、{.,\n,\r}
ほとんどのテキストファイルで機能します。
[\s\S]
は、DOTALLを使用できない場合に任意の文字を照合する一般的な方法です。
洗練された正規表現のテストおよび開発ツールはたくさんありますが、Javaで単純なテストハーネスが必要な場合は、以下を試してみてください。
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
これで、新しいテストケースを簡単に追加して、新しいパターンを試すことができます。正規表現の探索を楽しんでください。
いいえ、*
ゼロ個以上の文字に一致します。+
代わりに、1つ以上に一致するを使用する必要があります。
この表現はあなたにとってよりうまくいくかもしれません: [A-Z]+123
これをエンコードするために私が見た最も一般的な方法は、メンバーがすべての可能な文字のセットのパーティションを形成する文字クラスを使用することです。
通常、人が書くものと[\s\S]
いえ(空白や非空白)、 、[\w\W]
、[\d\D]
などすべての作業がでしょう。
.*
そして.+
新しい行を除く任意の文字のためのものです。
念のため、新しい行を含めたい場合は、次の式も、JavaやC ++などのダブルエスケープが必要な言語で機能する可能性があります。
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
ゼロ回以上、または
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
1回以上。
C#、PHP、Ruby、PERL、Python、JavaScriptなどの一部の言語では、ダブルエスケープは必要ありません。
[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex_1 = "[\\s\\S]*";
final String regex_2 = "[\\d\\D]*";
final String regex_3 = "[\\w\\W]*";
final String string = "AAA123\n\t"
+ "ABCDEFGH123\n\t"
+ "XXXX123\n\t";
final Pattern pattern_1 = Pattern.compile(regex_1);
final Pattern pattern_2 = Pattern.compile(regex_2);
final Pattern pattern_3 = Pattern.compile(regex_3);
final Matcher matcher_1 = pattern_1.matcher(string);
final Matcher matcher_2 = pattern_2.matcher(string);
final Matcher matcher_3 = pattern_3.matcher(string);
if (matcher_1.find()) {
System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
}
if (matcher_2.find()) {
System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
}
if (matcher_3.find()) {
System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
}
}
}
Full Match for Expression 1: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 2: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 3: AAA123
ABCDEFGH123
XXXX123
式を探索したい場合は、regex101.comの右上のパネルで説明されています。必要に応じて、このリンクで、サンプル入力とどのように一致するかを確認することもできます。
jex.imは正規表現を視覚化します。
(\W|\w)*
ダブルエスケープの代わりに好きです
問題例の具体的な解決策:-
試し[A-Z]*123$
一致します123
、AAA123
、ASDFRRF123
。123
使用前に少なくともキャラクターが必要な場合[A-Z]+123$
。
質問に対する一般的な解決策(正規表現の「任意の文字」に一致させる方法):
[\w|\W]{min_char_to_match,}
。[\S]{min_char_to_match,}
。[^]
改行を含む任意の文字と一致する必要があります。[^
CHARSは、CHARSの]
文字を除くすべての文字に一致します。CHARSが空の場合、すべての文字と一致します。
JavaScriptの例:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
私はこれを動作させます常にドットは任意の文字を意味しません。単一行モードの場合の例外。\p{all}
する必要があります
String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
System.out.println("true");
} else {
System.out.println("false");
}