2017-10-12 10 views
0

私は2つの文字クラス[1234](「純粋な数字」と呼ぶ)と[⓵⓶⓷⓸](「ファンキーディジット」と呼ぶ)を持っているとしよう。私は[1234⓵⓶⓷⓸]+(それを "数字のような"と呼ぶ)のような1つ以上の純粋なまたはファンキーな数字と一致する混合文字クラスを作成することができます。数字のようなものだが純粋ではない文字列と一致する正規表現

しかし、数字のような文字列と少なくとも1つのファンキーな数字を一致させたいと思っています。つまり、⓵2⓷4123⓸、および⓵⓶⓷⓸のような一致文字列の場合、ではなく、1234のような純粋な文字列と一致します。

正規表現として表現する方法はありますか?あなたがそれを行うことができPCRE(または所有数量詞をサポートする任意の正規表現エンジン)で

+0

'\ d * \ D + \ d *'を使用できませんか? –

+1

パターンを正の先読みで始める '^(?=。* [⓵⓶⓷⓸])[1234⓵⓶⓷⓸] +' – CAustin

+0

プログラミング言語/正規表現ライブラリとは何ですか?大きなテキストから部分文字列を抽出していますか?交換? –

答えて

2

/[1234]*+[1234⓵⓶⓷⓸]+/u 

独占的量*+あなたは少なくとも一つの特別な数字(以降があることを確信しているこの場合には、バックトラックを禁止次の桁は、最初の文字クラスにない特別な桁の1つにしかなりません)。

このようなマルチバイト文字を処理するには、u修飾子を使用する必要があります。

+2

これは '1234'と一致します – Barmar

+0

@Barmar [これは' 1234'と一致しません](https://regex101.com/r/9b9RcJ/1)。 –

+0

これは '* +'のためですか? – Barmar

2

シーケンスのどこにファンキーな数字があるのか​​わからないので、式の開始と終了の両方に任意のサイズの数字のような式[1234⓵⓶⓷⓸]*を付ける必要があります。

少なくとも1つのファンキーな数字が必要であるため、ファンキーであることが要求される少なくとも1つのシンボル([⓵⓶⓷⓸])と一致する必要があります。

このように、我々の得られる式は[1234⓵⓶⓷⓸]*[⓵⓶⓷⓸][1234⓵⓶⓷⓸]*である。

+0

これも機能し、シンプルです。バックトラッキングを防ぐため、所有量の限定量の方が良い点が気に入っています。より長い純粋な文字列の場合、regex101風船によって '* +'解(例:https://regex101.com/r/KyuX8u/3)と比較して報告された「ステップ」の数。ご回答有難うございます。 – David

関連する問題