質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

3808閲覧

正規表現で特定文字 以前の文字取得、特定文字移行の文字取得につきまして

nerd

総合スコア37

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/08/23 10:10

正規表現で現在、
/.+(?=_)/
でアンダーバー以前の文字を取得しております。
/_(\w+)/
でアンダーバー以降の文字を取得しております。

name_01
name_02
name_03
name_04

の場合ですと、この正規表現で取得できるのですが

test_name_01
test_name_02
test_name_03
test_name_04

の場合うまく取得できません。
希望する取得値は

test_name 01
test_name 02
test_name 03
test_name 04

としたいです。
ほかのサイトなどを見ながら([^_]+?)?$で試したりしたのですが、うまく動かず困っております。
なにとぞお分かりになる方がいましたらご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

最小限の修正で行くと、
/.+(?=_)/ ⇒ そのまま
/_(\w+)//.+_(\w+)/

1つの正規表現で、/(.+)_(\w+)/ でグループ1、グループ2で取得する方がわかりやすいかと。

投稿2019/08/23 11:47

otn

総合スコア86281

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nerd

2019/08/24 01:21

ご回答誠にありがとうこざいます。 ご指摘いただいたとおりグループでの取得をしたいと思います。 ご教授誠にありがとうございました。
guest

0

ベストアンサー

言語が不明ですが、まとめてマッチさせると、スマートだと思います。

JavaScript

1console.log('test_name_01'.split(/_(?=[^_]+$)/)); // ["test_name", "01"] 2console.log(/(^.+)_([^_]+$)/.exec('test_name_01')); // ["test_name_01", "test_name", "01", ...]

今回はphpにて作成しておりました。

Splitでの分けるアイデアありがとうございます。
盲点でした。

PHPには preg_split があります。

PHP

1$tokenList = preg_split('/_(?=[^_]+$)/','test_name_01'); 2print_r($tokenList);

Re: nerd さん

投稿2019/08/23 12:53

編集2019/08/24 05:20
think49

総合スコア18194

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nerd

2019/08/24 01:23

ご回答誠にありがとうございました。 言語の記述しておりませんでした。 今回はphpにて作成しておりました。 Splitでの分けるアイデアありがとうございます。 盲点でした。 ご指摘いただいたら正に!!となりました。 ご教授誠にありがとうございました。
think49

2019/08/24 05:20

親記事に追記しました。
guest

0

これでどうですか?

$ echo "test_name_01" | perl -ne '{ if (/(\w+)_(\w+)$/) { print "$1 $2\n" ; } }' test_name 01

投稿2019/08/23 10:26

scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nerd

2019/08/24 01:19

サンプルのご提供誠にありがとうございます。 僕の記述ミスで言語の記述しておりませんでした。 今回はphpにて作成しておりました。 後学のため勉強させていただきます。 誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問