任意のシンボルを受け入れる正規表現はありますか?
編集:私が探しているものを明確にするために..任意の数の空白を受け入れる正規表現を構築したいのですが、少なくとも1つの記号を含める必要があります(例: . " ' $ £ など)または(排他的ではないまたは)少なくとも 1 文字。
任意のシンボルを受け入れる正規表現はありますか?
編集:私が探しているものを明確にするために..任意の数の空白を受け入れる正規表現を構築したいのですが、少なくとも1つの記号を含める必要があります(例: . " ' $ £ など)または(排他的ではないまたは)少なくとも 1 文字。
はい。ドット ( .
) は、少なくともPattern.DOTALL
フラグと組み合わせて使用する場合は、任意の記号と一致します (それ以外の場合は、改行文字と一致しません)。ドキュメントから:
dotall モードでは、式 . 行末記号を含む任意の文字に一致します。デフォルトでは、この式は行末記号と一致しません。
あなたの編集について:
任意の数の空白を受け入れる正規表現を作成したいのですが、少なくとも 1 つの記号 (例: . " ' $ £ など) または (排他的ではない or) 少なくとも 1 文字を含める必要があります。
ここに提案があります:
\s*\S+
\s*
任意の数の空白文字\S+
1 つ以上 (「少なくとも 1 つ」) の非空白文字。Java では、記号は\pS
であり、句読点文字である と同じではありません\pP
。
この問題について話し、さらにすべての ASCII 句読点と記号のタイプを列挙します。ここでは、この回答を参照してください。
のようなパターン[\p{Alnum}\s]
は、1960 年代のレガシー データセットでのみ機能します。Java ネイティブ文字セットを使用して作業するには、次のようなものが必要です。
identifier_charclass = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";
whitespace_charclass = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]";
ident_or_white = "[" + identifier_charclass + whitespace_charclass + "]";
Java が最新のデータセットを操作するのを非常に難しくしているのは申し訳ありませんが、少なくとも可能です。
境界や書記素クラスターについて尋ねないでください。そのためには、他の投稿を参照してください。