丸いブラケットを検出し、開閉します -- c++ フィールド と regex フィールド 関連 問題

Detect round bracket, both open and close












2
vote

問題

日本語

<コード> "(a+b*9 )-10" などの式を壊す必要があります。

これは私が今持っているものですが、どちらの事件はうまくいかない。

<事前> <コード> const regex Parser::rxOpenBracket = regex("^\s*[(]\s*$"); const regex Parser::rxCloseBracket = regex("^\s*([)])\s*$");

何人かの助けが良いでしょう。ありがとう!

英語

I need to break a expression such as "(a+b*9 )-10" to extract/detect ( and ).

This is what I have now but either case doesn't work.

const regex Parser::rxOpenBracket = regex("^\s*[(]\s*$");  const regex Parser::rxCloseBracket = regex("^\s*([)])\s*$");  

Some help will be good. thanks!

</div
     
         
         

回答リスト

3
 
vote

または書くことができます:

<事前> <コード> const regex Parser::bracketPair = regex("\(.+?\)");

式は次のように変換されます。

<事前> <コード> (.+?) ( => The opening bracket (escaped as ( would indicate a group in regex) . => Any character * => Zero or more times (referring to the .) ? => Lazy, stop as soon as possible (referring to the *) ) => End bracket, also escaped

これを使用すると、開口ブラケットから始まるヒットのみが、閉鎖ブラケットが見つかるまでなし、または任意の数の文字を見つけるだけです。

(hello world) は処理されますが、 use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 0 は無視されます

 

Or you could write it:

const regex Parser::bracketPair = regex("\(.+?\)"); 

The expressions translates like this:

(.+?) ( => The opening bracket (escaped as ( would indicate a group in regex) .  => Any character *  => Zero or more times (referring to the .) ?  => Lazy, stop as soon as possible (referring to the *) ) => End bracket, also escaped 

By using this you would only find hits that starts with an opening bracket, followed by none or any number of characters until a closing bracket is found.

For instance (hello world) would be handled, but )hello world( would be ignored

</div
 
 
   
   
2
 
vote

use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 1 whitexと一致するwhitespace、 use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 2 は、文字列の先頭と use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 3 が最後に一致します。そのため、正規表現は、単一の開閉括弧を含む文字列と一致するだけで、オプションで/その後の空白の先行/その後の先行します。他の文字は許可されていません。

本当に括弧の文字のみを探している場合は、正規表現はOverkillです。 <コード> :

<事前> <コード> use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 5
 

s in a regex matches whitespace, ^ matches the start of the string and $ matches the end. So in effect, your regexes would only match strings containing a single opening/closing parenthesis, optionally preceded/followed by whitespace. No other characters allowed.

If you're really looking for the parenthesis characters only, regexes are way overkill. Just use std::string::find_first_of():

std::string data("(a+b*9 )-10");  for (std::size_t idx = data.find_first_of("()"); idx != data.npos; idx = data.find_first_of("()", idx + 1)) {   //idx now holds the index of a parenthesis:   assert(data[idx] == '(' || data[idx] == ')'); } 
</div
 
 
1
 
vote

アンカーを削除<コード> use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 6 および<コード> use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 7 ::

<事前> <コード> use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 8
 

Remove the anchors ^ and $:

const regex Parser::rxOpenBracket = regex("\s*[(]\s*"); const regex Parser::rxCloseBracket = regex("\s*([)])\s*");  
</div
 
 
1
 
vote

^ と<コード> $ は、行の開始と終わりのためのアンカーです。 arner> art 括弧がある場合は、である場合は見つけたいのであれば、必ず回線の開始または終わりにはそれらを残すことができます。また、あなたがそれを削除するのに一致する(空の文字列で置き換える)、それを削除するのを除いて、長さ0以上の空白のスペースをマッチしているので、そのアウトも残すことができます。

それはあなたを

で残します <事前> <コード> const regex Parser::rxOpenBracket = regex("\("); const regex Parser::rxCloseBracket = regex("\)");

または好きなら、

<事前> <コード> const regex Parser::rxOpenBracket = regex("[(]"); const regex Parser::rxCloseBracket = regex("[)]");
 

^ and $ are anchors for the start and the end of the line. If you just want to find out if there's any parenthesis at all, without it necessarily being at the start or the end of the line, you can leave those out.

Also, since you match white space of length 0 or more, unless you're matching to remove it (replacing it with an empty string), you can leave that out as well.

That leaves you with

const regex Parser::rxOpenBracket = regex("\(");  const regex Parser::rxCloseBracket = regex("\)");  

Or, if you prefer,

const regex Parser::rxOpenBracket = regex("[(]");  const regex Parser::rxCloseBracket = regex("[)]");  
</div
 
 

関連する質問

5  DFA - >正規表現  ( Dfa regular expression ) 
私は紙にDFAを書いて、それを正規表現のセットに翻訳したいです。誰もがこれを行うための良いツールを知っていますか? ...

2  括弧で囲まれていないC#コードにすべてのIFステートメントを見つけたいです。正規表現を通して  ( I want to find all if statements in c sharp code which are not followed by brack ) 
すべての if ステートメントと for ステートメントを見つけたいと思います。 if ステートメントに1行を書くと、ほとんどカーリーブラケットに囲まれているため、それらすべての if および for ステートメント。 助けてください! この文をキャプチャし...

11  木構造のための正規表現?  ( Regex for tree structures ) 
ツリー構造を検索して変更するための正規表現はありますか?簡潔なミニ言語(Perl Regexなど)が私が探しているものです。 これは私が探しているものを明確にするかもしれない例です。 <事前> <コード> <root> <node name="1"> ...

30  C ++で使いやすい正規表現のサポート[閉まっている]  ( Easy to use regular expression support in c ) 
この質問はスタックオーバーフローガイドラインを満たしていません。現在答えを受け付けていません。 この質問を改善したいですか? ...

59  PREG_REPLACEをPHPで使用するときは、一致する方法がありますか?  ( How can i get at the matches when using preg replace in php ) 
私は単語の大文字をつかみ、それらをスパンタグで包み込もうとしています。 preg_replace を使用していますが、抽出目的では何も出力していません。 。 <事前> <コード> preg_replace("/[A-Z]/", "<span class="i...

1  Perl:正規表現を使用してテキストからデータを抽出する  ( Perl extracting data from text using regex ) 
Perlを使用して正規表現でテキスト処理を行います。入力を制御していません。以下の入力の例をいくつか示しました。 項目BとCは、値が異なる文字列n回になることができます。私はすべての値を背面参照として取得する必要があります。それとも私はすべての耳です。 ブ...

1  正規表現のマッチング文字を除く  ( Excluding matching characters in regular expression ) 
私は正規表現の問題で立ち往生しています。 私は一致する必要がある文字列を持っています。文字列は常に2文字で始まり、次に6桁の数字、e.g。 EF123456 AB123456 しかし、無視する必要がある文字の組み合わせが1つあります。 e.g。: ...

49  正規表現:文字列内の2つのタグ間のサブストリングを引き出す  ( Regex to pull out a sub string between two tags in a string ) 
私は次の形式でファイルを持っています: <前> データデータ データ [始める] データ私が欲しいデータ [終わり] データ <コード> [Start] [End] タグの間から Data I want を正規表現を使用してつかみたいと思います。誰かが...

2  単語または句のインスタンスを見つけるための正規表現 - その単語やフレーズが中括弧である場合を除く  ( Regex to find instance of a word or phrase except if that word or phrase is i ) 
最初の免責事項。私は正規表現について少し知っていますが、私は専門家ではありません。彼らは私が一年に2回、私が本当に2回必要なものであるようですので、私の脳の「上に」しないでください。 状況:特定の単語を一致させるために正規表現を書いて、それを「osttric...

6  PythonのReモジュールを使用して1回の急増で任意の順序付けられていないグループのセットを取得することが可能ですか?  ( Possible to retrieve an arbitrary unordered set of named groups in one swoop wit ) 
これはいくつかの問題に対してスーパーハンディーです: <事前> <コード> >>> re.search('(?P<b>.b.).*(?P<i>.i.)', 'abcdefghijk').groupdict() {'i': 'hij', 'b': 'abc'} ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有