2017-01-30 3 views
1

私は、この正規表現を持っている:正規数学的な発現のための発現およびグループとの論理

/(?:\-?[0-9a-zA-Z]+(?:\.?[0-9a-zA-Z]+)?+[\+\-\*\/\<\>\=])+\-?[0-9a-zA-Z]+(?:\.?[0-9a-zA-Z]+)?/ 

問題は、私はこの表現が解読できることをn個のグループが必要とするが、私はそれを変更する方法がわからないということです。

https://regex101.com/を編集に使用しましたが、?:が正しく一致しない原因となったものを削除しました。

通常の入力は1+2-b*4/c or 1+a=3-bです。

私が必要とする答えはあなたがその表現にかなり簡素化することができます

full match[0] = 1+a=3-b 

group[1] = '1' 
group[2] = '+' 
group[3] = 'a' 
group[4] = '=' 
group[5] = '3' 
group[6] = '-' 
group[7] = 'b' 
+0

uが2の正規表現(検証のためのウル正規表現と、すべてのグループ番号を取得するために、その後、 "\ dの+" を使用することができます)。 –

+0

1文字だけではなく、 "string"や12や12.3のような文字列を使用します。この正規表現はこのタイプの入力と一致しますが、後で動作するグループを作成できませんでした。@ chris85 –

+0

@ chris85、thx dudeまさに私が望むもの。 –

答えて

1

のようなものです。また、実際にエスケープする必要があったキャラクタークラスの唯一の文字は-であり、最初の/最後の文字に移動するのと同じ効果があることにも注意してください。

(小数可能性)(少なくとも1)小文字のアルファベット、数字連続連続、または任意の(ほとんど?)数学演算を探し
[a-z]+|(?:\d+(?:\.\d+)?)|[-+/*=] 

:この正規表現は、あなたが後にしている何を達成すべきです。これらは別々のルールであるため、それぞれの検索は1つの一致となります。

PHPの使用法:

foreach(array('12.3+22-this*4/varable','1+a=3-b') as $equat) { 
    preg_match_all('~[a-z]+|(?:\d+(?:\.\d+)?)|[-+/*=]~', $equat, $matches); 
    print_r($matches[0]); 
} 

PHPデモ:https://eval.in/727124

正規表現のデモ:https://regex101.com/r/0mTL6d/1

関連する問題