2011-12-28 8 views
0

与えられた数字を含むすべての単語をどのように一致させるのかと思いますか?与えられた数字を含むすべての単語の一致方法は?

私はO'Reillyの正規表現のクックブックを見てきましたが、アイデアを得ることができませんでした。

ケース1の一部の文字は、数字の前にある。(解決)B \

(\ D + [^ \ S] +)\

time=>123, address~4321 

Bケース2。いくつかの文字は数字が続く。(解決)B \

(\ D + [^ \ S] +)\

1234<=range, 321=>location 
B 210

ケース3.一部の文字は4桁目です。

[email protected], address*4321%location 

ケース4.ケース1またはケース2またはケース3の1行に複製します。

firstTime=12 secondTime=34 
429923<=firstRange    353534=>secondRange 
A12345alpha  B9876beta 
+0

「単語」とは何ですか?スペースのない文字シーケンス? – fge

+0

はい、スペースなし(/ s) –

+0

どの言語ですか? – ridgerunner

答えて

0

あなたは空白が含まれていない任意の文字列を指定する単語を定義しているので、あなたはこのようなものを使用する場合があります

([^\s]*\d+.[^\s]*)\m 

\mフラグは全体で正規表現の仕事をしなければなりません複数の行。

+0

ケース1、ケース2、ケース3可能です。ありがとうございました。どのようにCase4を解決するのですか? –

+1

なぜ(\ S * \ d + \ S *) 'ではないのですか? – gpojd

+0

@gpojd:そうですね、そういうこともできます。私はあなたのことが仕事を終わらせる別の方法だと思います。 私は自分の答えを変更しました。 – npinti

0

入力してみて(\S*(?:\d\S*)*)を試してみてください。 normal\d+(1桁以上)であること\S(空白文字以外のもの)とspecialされた状態で再びnormal* (special normal*)*パターン、:

[email protected] ~ $ perl -ne 'print "Match: -->$_<--\n" foreach m/(\S*(?:\d+\S*))/gm' <<EOF 
> firstTime=12 secondTime=34 
> 429923<=firstRange    353534=>secondRange 
> A12345alpha  B9876beta 
> EOF 
Match: -->firstTime=12<-- 
Match: -->secondTime=34<-- 
Match: -->429923<=firstRange<-- 
Match: -->353534=>secondRange<-- 
Match: -->A12345alpha<-- 
Match: -->B9876beta<-- 

使用する正規表現エンジンによって、あなたも、すべてに沿って所有数量を使用することができます、またはマッチングを加速するための原子グループ。

そして、あなたがしたい場合の本 - >http://regex.info

0

ここでは、数字の「2」を含む各「単語」に一致します正規表現です。

\S*?2\S* 

一致する2桁の数字のシーケンスに変更します。 2、5、7の単語を一致させたい場合は、文字クラスを使用してください:

\S*?[257]\S* 
関連する問題