YURUGINoriko
@YURUGINoriko

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

文字列の途中に一つだけ半角空白がある正規表現を知りたいです

解決したいこと

PostgresqlのSQLのWhere文に正規表現を入れて
文字列の途中に一つだけ半角空白がある
2語の単語を抽出したい

例)
apple → 空白0個なので抽出されない
red apple → 空白1個なので抽出される
baby with red apple cheek → 空白4個なので抽出されない

発生している問題・エラー

空白が2個以上(3語以上の語)が抽出されてしまう

該当するソースコード

SELECT 
"語1"
FROM public.test_table
where
"語1" ~ '\S \S'

自分で試したこと

where
"語1" ~ '\S \S'

where
"語1" ~ '[^ ] [^ ]'

など

(中央に半角空白入っています)

1

4Answer

/S で解決しているので蛇足です。

正規表現の解き方の紹介です。
実際のデータをメタ記号(パターン記号と個数記号)で段階的に置き換えます。

red apple
^red apple$
^[a-zA-Z]+ apple$
^[a-zA-Z]+ [a-zA-Z]+$
^\S+ [a-zA-Z]+$
^\S+ \S+$
^\S+\s\S+$ 又は ^\S+\s+\S+$

因みに \s はスペース、タブ、改行で
\S は \s 以外である点を留意して下さい。

最後に
apple
baby with red apple cheek
の様々なデータで検証しましょう。

3Like

Comments

  1. @YURUGINoriko

    Questioner

    @HalHaradaさま
    おはようございます。

    正規表現の解き方のご紹介
    ありがとうございます。

    学習サイトでメタ記号の
    一つ一つの意味は学習できますが
    具体例でどうやって組み立てていくのかは
    書いてないので、
    とても参考になりました。
    ありがとうございます。

回答後にすみません…
・空白文字以外にマッチする\Sというものが存在する
・単語の部分に対し*(0回以上の繰り返し)が設定されている為、空白のみの文字列がマッチしてしまいそう
というのがあり、

'^\S+\s\S+$'

というのを提示したいと思います…

2Like

Comments

  1. @YURUGINoriko

    Questioner

    @daisei-yoshinoさま

    ご提案ありがとうございます<(_ _)>
    なるほど、空白のみの文字列がマッチしてしまわないように
    改良できるのですね。

    入力のフィールドには空白のみの文字列は存在しなかったので
    大丈夫だったのですが、勉強になりました。
  2. ご返答ありがとうございます!
    正規表現は私でもまだまだ分からないことがあるくらい深いので、興味がございましたら色々と勉強してみるのも良いかもしれません!

Comments

  1. 解決したようでよかったです!
    補足としてですが、正規表現の内容はほぼ質問者様と同様です。
    違うポイントは行頭と行末を追加していることくらいです。
  2. @YURUGINoriko

    Questioner

    @YottyPG

    補足ありがとうございます。<(_ _)>

    正規表現駆け出しなもので
    行頭と行末を追加して組み合わせるのが
    思いつきませんでした。

:heart_eyes:
ありがとうございます。
できました。
<(_ _)>

正規表現の意味について
分解して理解したいと思います。

仕事が進みます。
大変感謝申し上げます。

0Like

Your answer might help someone💌