このように、正規表現を使って、"empty string"でないものを検出することは可能でしょうか?
string s1 = "";
string s2 = " ";
string s3 = " ";
string s4 = " ";
など
trimなどを使えばいいのは分かっているのですが、正規表現を使いたいのです。
^(?!\s*$).+
は、少なくとも1つの非空白文字を含むすべての文字列にマッチします。
だから
if (Regex.IsMatch(subjectString, @"^(?!\s*$).+")) {
// Successful match
} else {
// Match attempt failed
}
がやってくれるはずです。
^
は、文字列の先頭に検索を固定する。
いわゆる負のルックアヘッドである(?!˶‾‾‾)
は、文字列の最後まで空白文字だけをマッチングすることは不可能であると主張する。
.+は実際にマッチングを行います。これは、文字列の末尾まで(改行を除く)何でもマッチします。改行を許可したい場合は、
RegexOptions.Singleline` オプションを設定する必要があります。
以前のご質問のバージョンから残っています:
^\s*$
は、空白だけを含む(あるいは空の)文字列にマッチします。
正反対です:
^\S+$
は、非空白文字のみからなる文字列にのみマッチします(最小1文字)。
次の2つのいずれかを実行できます。
^\ s * $
と一致します。一致は、文字列が「空」であることを意味します。^
、 $
は、それぞれ文字列アンカーの開始と終了です。\ s
は空白文字です。*
はゼロまたはそれ以上の繰り返しです。\ S
を見つけます。発生は、文字列が「空」ではないことを意味します。\ S
は \ s
の否定バージョンです(ケースの違いに注意してください)。
*したがって、 \ S
は非ホワイトスペース文字と一致します。RegexOptions.EC MAScript
を使用している場合を除き、 \ s
は省略記号 ...
などと一致することに注意してください。space< / kbd>を使用することもできます。 charクラスでは、次のいずれかに似た式で:
(?!^[ ]*$)^\S+$
(?!^[ ]*$)^\S{1,}$
(?!^[ ]{0,}$)^\S{1,}$
(?!^[ ]{0,1}$)^\S{1,}$
使用する可能性のある言語/味によって異なります。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(?!^[ ]*$)^\S+$";
string input = @"
abcd
ABCD1234
#$%^&*()_+={}
abc def
ABC 123
";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
---------。
式を簡略化/変更/探索したい場合は、regex101.comの右上パネルで説明されています。 必要に応じて、このリンクで、一部のサンプル入力とどのように一致するかを確認することもできます。
---------。
[jex.im](https://jex.im/regulex/#!flags=& re =%5E(a%7Cb)*%3F%24)は、正規表現を視覚化します。
。。