導入
Javaで文字列を扱う際、「空白以外の文字だけを抽出したい」「スペースやタブを除去して値を取り出したい」といった場面は非常に多いです。そんな時、正規表現の \S を使いこなせているでしょうか?これは「非空白文字」を指す特殊文字ですが、これを知っているだけで、冗長な文字列処理コードを驚くほど短く、かつ堅牢に書けるようになります。今回は、現場で役立つ正規表現の基礎と実装テクニックを解説します。
基礎知識
正規表現において、\S は「非空白文字(Non-whitespace character)」にマッチするメタ文字です。具体的には、半角スペース、タブ(\t)、改行(\n)、復帰(\r)、フォームフィード(\f)以外のすべての文字を対象とします。
対になる \s(空白文字)とセットで覚えておくと便利です。Javaの Pattern クラスと Matcher クラスを使用することで、複雑な文字列検索や置換を1行で記述できるようになります。
実装/解決策
Javaで正規表現を利用する際は、Pattern.compile() でパターンをコンパイルし、matcher() で対象文字列と照合します。
「非空白文字を抽出する」という要件であれば、\S+(1文字以上の非空白文字の連続)というパターンを使い、find() メソッドでマッチした箇所を順次取得するのが定石です。
サンプルプログラム
以下のコードは、文章の中から空白を除外して単語だけを抽出するサンプルです。そのままコピーして実行してみてください。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexSample {
public static void main(String[] args) {
String input = ” Java 正規表現を 使いこなそう “;
// \S+ は「非空白文字が1回以上繰り返される」というパターン
Pattern pattern = Pattern.compile(“\\S+”);
Matcher matcher = pattern.matcher(input);
System.out.println(“抽出された単語:”);
while (matcher.find()) {
// マッチした部分文字列を表示
System.out.println(“-> ” + matcher.group());
}
}
}
応用・注意点
現場で活用する際の重要なポイントが2つあります。
1. エスケープ処理の罠:
Javaの文字列リテラル内では、バックスラッシュ自体をエスケープする必要があります。そのため、正規表現で \S と書きたい場合は、コード上では \\S と書く必要がある点に注意してください。
2. 全角スペースの扱い:
標準の \S は、あくまで「半角の空白系」を対象としています。日本語環境で全角スペース(U+3000)を空白として扱いたい場合は、\\S だけでなく、Unicodeプロパティ(\p{Z}など)を組み合わせて正規表現を拡張する必要があります。
正規表現を正しく使いこなすことは、コードの可読性を高めるだけでなく、保守性の高いシステムを作るための第一歩です。ぜひ、プロジェクトのバリデーションやログ解析などに役立ててください。

コメント