部分文字列がGNU libc regexec()との正規表現を使って文字列に何回現れるかを数えることはできますか?GNU libc regexec()を使って部分文字列を数えよう
答えて
いいえ、regexec()は呼び出しごとに1つの一致を検出します。次の試合を見たい場合は、もう一度試合に出さなければなりません。
プレーンな部分文字列のみを検索する場合は、標準のCのstring.h関数を使用するほうがはるかに優れています。strstr();特殊正規表現のエスケープについて心配する必要はありません。
regexecは、4番目のパラメータpmatchにすべての一致がある構造体を返します。 "pmatch"は固定サイズの構造体です。より多くのマッチがある場合は、別の時間に関数を呼び出すことになります。
私は2つのネストされたループでこのコードを見つけました。私はそれを変更しました。あなたはhttp://www.lemoda.net/c/unix-regex/index.htmlでそれを見つけるCAND元タラ:私はない50の評判を持っているので、別の答えを作成するための
static int match_regex (regex_t * r, const char * to_match)
{
/* "P" is a pointer into the string which points to the end of the
previous match. */
const char * p = to_match;
/* "N_matches" is the maximum number of matches allowed. */
const int n_matches = 10;
/* "M" contains the matches found. */
regmatch_t m[n_matches];
int number_of_matches = 0;
while (1) {
int i = 0;
int nomatch = regexec (r, p, n_matches, m, 0);
if (nomatch) {
printf ("No more matches.\n");
return nomatch;
}
for (i = 0; i < n_matches; i++) {
if (m[i].rm_so == -1) {
break;
}
number_of_matches ++;
}
p += m[0].rm_eo;
}
return number_of_matches ;
}
申し訳ありません。 @Oscar Raig Colonの答えはコメントできません。
pmatchすべての部分文字列に一致することはできません。pmatchは部分式のオフセットを保存するために使用され、キーは部分式を理解するためのもので、部分式はBREで "\(\)"、EREで "(正規表現全体に部分式がない場合、regexec()は最初の一致文字列のオフセットだけを返し、pmatch [0]に置きます。
あなたに例を見つけることができる[http://pubs.opengroup.org/onlinepubs/007908799/xsh/regcomp.html][1]
以下にREG_NOTBOLフラグは、ユーザによって供給されたパターンと一致する行のすべてのサブストリングを検索するためにregexecは()と共に使用することができる方法を示しています。 (例を簡単にするために、ほとんどエラーチェックは行われません)
(void) regcomp (&re, pattern, 0);
/* this call to regexec() finds the first match on the line */
error = regexec (&re, &buffer[0], 1, &pm, 0);
while (error == 0) { /* while matches found */
/* substring found between pm.rm_so and pm.rm_eo */
/* This call to regexec() finds the next match */
error = regexec (&re, buffer + pm.rm_eo, 1, &pm, REG_NOTBOL);
}
- 1. 文字列中の部分文字列の数を数えよう
- 2. 部分文字列を使って文字列を分割する
- 3. 関数(周波数)を使って文字を数えよう
- 4. Python-文字列の部分文字列の出現数を数える方法
- 5. 文字列を部分文字列に置き換える
- 6. メッセージの部分文字列の部分文字列の部分文字列
- 7. regex re.findallを使って両側に空白文字を含む部分文字列を見つけよう
- 8. 正確な部分文字列をPHPの文字列に数える
- 9. 文字列内の一致する部分文字列を数える
- 10. 複数の部分文字列を文字列に置き換える - Javascript
- 11. 複数の部分文字列を元の部分文字列を含む条件付き部分文字列に置き換えます。
- 12. C#を使用して数値部分文字列の文字列のリストを並べ替える方法
- 13. Bash:ループを使ってテキストファイル内の文字列のインスタンスを数えよう
- 14. 文字列と部分文字列とメイン文字列に含まれる部分文字列の数
- 15. 部分文字列の.txtを読み取って、AutoCompleteSourceの部分文字列を返します。
- 16. スライス表記を使って特定の部分文字列を数える方法
- 17. 文字列の可変文字列の部分文字列を変数に置き換える
- 18. 部分一致文字列を太字文字列に置き換えます。
- 19. 部分文字列のpowershell部分文字列
- 20. str_replaceを使った部分文字列置換
- 21. 文字列の部分文字列
- 22. 文字列のスカラフィルタ部分文字列
- 23. 文字列内の部分文字列
- 24. 最初に文字列を分割し、部分文字列を使用して文字を区切ります。
- 25. 文字列を部分に分割する方法 - ローマ数字
- 26. regexecを使ってグループ化する
- 27. 文字列を複数の部分文字列に分割します。
- 28. でReplaceAll()を使用して文字列から部分文字列を削除
- 29. 文字列を部分文字列に分割するc
- 30. 文字列をiOSの部分文字列に分割する