1. ホーム
  2. regex

[解決済み] 空白にマッチするが、改行にはマッチしない

2022-03-17 13:41:35

質問

空白をマッチングさせたいが、改行はマッチングさせないことがある。

これまでは [ \t] . もっと簡単な方法はないのでしょうか?

どのように解決するのですか?

Perl バージョン 5.10 以降では、補助的な縦書き文字クラスと横書き文字クラスをサポートしています。 \v\h と、一般的な空白文字クラスである \s

最もクリーンな解決策は 水平方向の空白 文字クラス \h . これは、ASCIIセットのタブとスペース、拡張ASCIIのノンブレイキングスペース、またはこれらのUnicode文字のいずれかにマッチします。

U+0009 CHARACTER TABULATION
U+0020 SPACE
U+00A0 NO-BREAK SPACE (not matched by \s)

U+1680 OGHAM SPACE MARK
U+2000 EN QUAD
U+2001 EM QUAD
U+2002 EN SPACE
U+2003 EM SPACE
U+2004 THREE-PER-EM SPACE
U+2005 FOUR-PER-EM SPACE
U+2006 SIX-PER-EM SPACE
U+2007 FIGURE SPACE
U+2008 PUNCTUATION SPACE
U+2009 THIN SPACE
U+200A HAIR SPACE
U+202F NARROW NO-BREAK SPACE
U+205F MEDIUM MATHEMATICAL SPACE
U+3000 IDEOGRAPHIC SPACE

垂直スペース パターン \v はあまり有用ではありませんが、これらの文字にマッチします。

U+000A LINE FEED
U+000B LINE TABULATION
U+000C FORM FEED
U+000D CARRIAGE RETURN
U+0085 NEXT LINE (not matched by \s)

U+2028 LINE SEPARATOR
U+2029 PARAGRAPH SEPARATOR

にマッチする垂直方向の空白文字は7つあります。 \v と一致するものが18個、水平方向に一致するものが \h . \s は23文字にマッチします

すべての空白文字は、以下のいずれかです。 垂直 または 水平 をオーバーラップさせることはできませんが、これらは適切なサブセットではありません。 \h も U+00A0 NO-BREAK SPACE にマッチし、さらに \v は U+0085 NEXT LINE にもマッチしますが、どちらも \s