const char key[][12] = { "happy", "new", "year", "2014" }
// 是否完全匹配某一个特定的 key
int match1(const char *s, const char *t)
{
while (*s && *t && *s++ == *t++)
return !(*s || *t)
}
// 是否匹配一组 key 的中一个
int match(const char *s)
{
int i, j
for (i = 0 i < sizeof key / sizeof key[0] i++)
if (match1(s, key[i]))
{
// 如果匹配到某个 key,则打印匹配到的 key
for (j = 0 key[i][j] j++) putchar(key[i][j])
putchar('\n')
return 1
}
return 0
}
int main()
{
char s[BUFSIZ]
int i, k
// 输入一个字符串
for (i = 0 i < BUFSIZ && (s[i] = getchar()) != '\n' i++)
s[i] = '\0'
match(s)
return 0
}
以上程序是判断输入的字符串是否是某个 key 中的一个。
如果不要求完全匹配,而是要求检测输入的字符串是否含有某个 key,则程序如下:
#include <stdio.h>
const char key[][12] = { "happy", "new", "year", "2014" }
// 是否含有某一个特定的 key
int match1(const char *s, const char *t)
{
const char *p, *q, *r
for (p = s, q = t *p && *q p = r, q = t)
{
for (r = p + 1 *p == *q p++, q++)
if (*q == '\0') return 1
if (*p == '\0') return 0
}
return 0
}
// 是否含有一组 key 的中一个
int match(const char *s)
{
int i, j
for (i = 0 i < sizeof key / sizeof key[0] i++)
if (match1(s, key[i]))
{
// 如果匹配到某个 key,则打印匹配到的 key
for (j = 0 key[i][j] j++) putchar(key[i][j])
putchar('\n')
return 1
}
return 0
}
int main()
{
char s[BUFSIZ]
int i, k
// 输入一个字符串
for (i = 0 i < BUFSIZ && (s[i] = getchar()) != '\n' i++)
s[i] = '\0'
if (match(s))
{
// 如果匹配到某个 key,则打印输入的原始字符串
for (k = 0 k < i k++) putchar(s[k])
putchar('\n')
}
return 0
}
按照你的要求编写的匹配程序如下
using Systemusing System.Text.RegularExpressions
namespace MatchApplication{
class MatchClass{
static void Main(string[] args){
string s="descr: CHINA UNICOM Shanghai city network\ndescr: China Unicom\ndescr: No.21,Jin Rong Street,Beijing,100033\ndescr: P.R.China\ncountry: CN"
MatchCollection mc =Regex.Matches(s, @"descr:([\s\S]*?)(?=descr|country|$)",RegexOptions.IgnoreCase)
foreach (Match m in mc){
Console.Write(m.Groups[1].Value)
}
Console.ReadKey()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)