2016-09-23 4 views
-2

[PT]で終わる下位クエリと、最後に$を持つテキストの中身を取得する必要があります。正規表現間のすべてを取得する

17 and (am restaur$ or food$[]produc$)[PT] 
*neo$ & (bruch$ | curl$ | hair$)[PT] 
(computer$ or software$ or hardware$ or peripheral$ or conductor$)[PT] 

期待される成果: 午前restaur、食品、生産...

私はそれが[PT]

+0

さて、あなたは、あなたがしようとしたものを説明できる - あなたが達成しようとしているものを明確にすることを。また、関連するタグ:JSまたはC#? –

+0

これでC#を使用しています。 'Regex.Matches(str、@" \ w +(?= \ $) ")' –

+0

'* neo $'は '(....)'の中になく、カッコで部分文字列を取得しようとしました。ここでは何もクリックしません。申し訳ありませんが、あなたの質問はまだ不明です。 –

答えて

0

てみ間でテキストだけを与える

(?<=[(])(.*)(?=([)][[]PT)) 

REGEX

の下で試してみました次の正規表現(Javascript)、

k.match(/(\w*)\$/g).join("").split("$"); 

ここで、kにはあなたの文字列が含まれています。例:k = "17 and (restaur$ or food$[]produc$)[PT]";ここでは\wはすべての単語文字に一致し、match関数は文字列からすべての一致を返します。

0

以下のコードスニペットは、2つの正規表現パターンを使用しています。
最初にPTコンテンツを取得します。
そして、それらの一致から値を取得する2番目の。

var str = "17 and (restaur$ or food$[]produc$)[PT]\ 
 
*neo$ & (bruch$ | curl$ | hair$)[PT]\ 
 
(computer$ or software$ or hardware$ or peripheral$ or conductor$)[PT]\ 
 
16 and (illumination$ [TS]) and (racing | (auto$ adj rac$) | auto$ | car)[PT]"; 
 

 
//var re1 = /\([^()]*?\)\[PT\]/g; 
 
var re1 = /\((?:[^()]*?(?:\(.*\)(?!\[)))*[^()]*?\)\[PT\]/g; 
 
var re2 = /\w+(?=\$)/g; 
 

 
var matchArray = []; 
 
var m1, m2; 
 

 
while (m1 = re1.exec(str)) { 
 
    console.log(m1[0]); 
 
    while (m2 = re2.exec(m1[0])) { 
 
     matchArray.push(m2[0]); 
 
    } 
 
} 
 

 
console.log(matchArray);

+0

これはいくつかのためであるが、以下のように見える "34と '41' [TS]と(レース|(自動車$ adj rac $)|自動車$ |車)[PT]"; この場合、nullになる – Prithvi

+0

@Prithviこれは、re1のパターンがネストされた括弧がないと仮定しているためです。最初の正規表現を変更して、もう少し多くのPTをキャッチします。標準的なjavascriptの正規表現では再帰はありませんが、ネストされたものの可能性のあるすべてのケースをどのようにキャッチするかは今はわかりません。 – LukStorms

関連する問題