2011-06-29 14 views
0

私は: text to match -の中のテキストと一致する必要があるプロジェクトを構築しています。内部のテキストに一致する正規表現:

nathanpc/ltweet:#StackOverflowで質問をする: "インサイドテキストに一致する正規表現: - " - 私はこの文字列を持っている場合たとえば、

@devs私はマッチさせたいですAsking a question at #StackOverflow: "Regular Expression To Match a Text Inside : -"。最初の文字は:と最後の文字は-ですが、正しい正規表現は何ですか?

PS:私はjQueryの

答えて

2

あなたは多くの言語に見られるように、Perl互換の正規表現を使用している場合:

/:(.*)-/ 

あなたは言語に応じて、スラッシュを必要としない場合があります。キャプチャグループ1は必要なコンテンツを取得します。

.*は貪欲なマッチャーなので、できるだけ多くの文字を入力の最後のダッシュまで一致させようとします。あなたは.のような貪欲演算子を使用している場合

+1

真+1。よりシンプルかつ即時。おそらく、OPはスペース '/:\ s(。*)\ s- /'をグループ化したくありません。 –

0

にJavascriptを使用している「標準」の正規表現は、あなたが説明したとおりに、このテキストを解析することはできません。その構文解析には、コンテキストが必要ですが、これは正規表現では表現できません。たとえば、最初の " - "を受け取った場合、式はどのように終了しないのですか?

私の頭の中には、サブ式の解析を可能にするPerlの拡張正規表現しか使えませんが、「:」と「 - 」の出現回数を数えなければならないため、最後のものと正確に一致します。

1

それはとても:(.*)-が動作するような単純なこの何かを一致させるために(少なくともPerl互換の正規表現エンジンに)

を可能に最大のマッチを形成しようとします。

my $str = "Discard:Testing:- one two three -discard"; 
$str =~ m/:(.*)-/; 
print $1; 

$1 = "Testing:- one two three"

それともここにJavaScriptで:http://www.regular-expressions.info/javascriptexample.html

+0

もう一度、それは動作しません。 Perlは最初の " - "で停止しないことをどのように知っていますか? –

+0

これは貪欲なオペレータです。 Perlはそれをあきらめる前に最大限に拡張しようとします。 – Bayes

+0

質問は "諦め"の定義です:)再び一般的にはうまくいかないでしょう。 –

1

これは私の作品(ルビー):

はPerlで、この例のスクリプトを参照してください

[^:]+:\s+([^-]+.*?)\s- 

テスト:

test = "nathanpc/ltweet: Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -' - @devs" 

m = test.match /[^:]+:\s+([^-]+.*?)\s-/ 

その後、

m[1].to_s 

が他の人のよう

Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -' 

を生産するには、同じように動作します:(.*)-はるかに簡単に気づきました。おそらくスペースなし:\s(.*)\s-

関連する問題