正则表达式 包含括号 怎么写才正确?
括号是特殊字符,必须转义。因此必须在它前面加右斜杠。综上所述,这里唯有3合适。匹配的是任意多个左括号和右括号。括号内没有任何内容。正则表达式的() [] {}有不同的意思。() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。(\s*)表示连续空格的字符串。[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格。(0-9) 匹配 '0-9′ 本身。 [0-9]* 匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。
正则表达式包含括号,怎么写才正确?
括号是特殊字符,必须转义。因此必须在它前面加右斜杠。综上所述,这里唯有3合适。匹配的是任意多个左括号和右括号。括号内没有任何内容。正则表达式的() [] {}有不同的意思。() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。(\s*)表示连续空格的字符串。[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格。(0-9) 匹配 '0-9′ 本身。 [0-9]* 匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。
如何利用链栈实现括号匹配算法
#include
#define MAX 100
typedef struct{
int row,col;
int val;
}TriNode;
typedef struct{
TriNode data[MAX];
int m,n,t;
}TriTable;
void CreateTri(TriTable *p) /*该函数为建立三元组,要求按行优先顺序输入*/
{ int i;
scanf("%d,%d,%d",&p->m,&p->n,&p->t);
printf("Please input the information of row,queue and element:\n");
for (i=1;it;i++)
scanf("\t\t%d,%d,%d",&p->data[i].row,&p->data[i].col,&p->data[i].val);
}
void OutputTri(TriTable *p) /*该函数将输出指定三元组内容*/
{ int i;
printf("\n");
printf("According the row first input the data:\n");
for (i=1;it;i++)
printf("%d ,%d ,%d \n",p->data[i].row,p->data[i].col,p->data[i].val);
}
void Output(TriTable *p) /*该函数将输出矩阵pa+pb的结果*/
{ int i;
printf("\n");
printf("The sum of pa and pb:\n");
for (i=1;it;i++)
printf("%d ,%d ,%d \n",p->data[i].row,p->data[i].col,p->data[i].val);
}
void AddTri(TriTable *pa,TriTable *pb,TriTable *pc) /*该函数是将pa,pb所指三元组求和后保存在新三元组PC中*/
{ int i,j,k;
i=j=k=1;
while( pa->t-i>=0 && pb->t-j>=0)
if(pa->data[i].row==pb->data[j].row){ /*当pa与pb当前元素的行号相等*/
if(pa->data[i].col==pb->data[j].col){ /*当pa与pb当前元素的列号相等*/
if ((pa->data[i].val+pb->data[j].val)!=0){
pc->data[k].row=pa->data[i].row;
pc->data[k].col=pa->data[i].col;
pc->data[k].val=pa->data[i].val+pb->data[j].val; /*元素值相加*/
k++;i++;j++;
}
else{
i++;j++;
}
}
else{
if (pa->data[i].coldata[j].col) /*当pa与pb当前元素的列号不等*/
{
pc->data[k].row=pa->data[i].row;
pc->data[k].col=pa->data[i].col;
pc->data[k].val=pa->data[i].val;
k++;i++;
}
else{
pc->data[k].row=pb->data[j].row;
pc->data[k].col=pb->data[j].col;
pc->data[k].val=pb->data[j].val;
k++;j++;
}
}
}
else{
if(pa->data[i].rowdata[j].row) /*当pa与pb当前元素的行号不等*/
{
pc->data[k].row=pa->data[i].row;
pc->data[k].col=pa->data[i].col;
pc->data[k].val=pa->data[i].val;
k++;i++;
}
else
{
pc->data[k].row=pb->data[j].row;
pc->data[k].col=pb->data[j].col;
pc->data[k].val=pb->data[j].val;
k++;j++;
}
}
if (pa->t-i>=0)
for (;it;i++){
pc->data[k].row=pa->data[i].row;
pc->data[k].col=pa->data[i].col;
pc->data[k].val=pa->data[i].val;
k++;
}
if (pb->t-j>=0)
for (;jt;j++){
pc->data[k].row=pb->data[j].row;
pc->data[k].col=pb->data[j].col;
pc->data[k].val=pb->data[j].val;
k++;
}
pc->m=pa->m;/*复制结果矩阵的总行数*/
pc->n=pa->n;
pc->t=k-1;/*得到结果矩阵中非0元素的总个数.*/
}
main(){
TriTable *ma,*mb,*mc;
ma=(TriTable*)malloc(sizeof(TriTable));
mb=(TriTable*)malloc(sizeof(TriTable));
mc=(TriTable*)malloc(sizeof(TriTable));
printf("\n\tHow mang row,col,val do you input Matrix A:\n\t\t");
CreateTri(ma);
OutputTri(ma);
printf("\n\tHow mang row,col,val do you input Matrix B:\n\t\t");
CreateTri(mb);
OutputTri(mb);
AddTri(ma,mb,mc);
Output(mc);
getch();
}
用栈实现括号匹配的检验
#include
#include
#define MAX_STACK 100
struct stStack
{
char szStack[MAX_STACK];
int nTop;
};
void InitStack(stStack& s)
{
s.nTop = -1;
}
char Push(stStack& s, char c)
{
if (s.nTop == MAX_STACK - 1)
return 0;
s.nTop ++;
s.szStack[s.nTop] = c;
return c;
}
char Pop(stStack& s)
{
if (s.nTop == -1)
return 0;
char c = s.szStack[s.nTop];
s.nTop--;
return c;
}
int Check(char* szText)
{
stStack s;
InitStack(s);
int nLen = strlen(szText);
for (int i = 0; i < nLen; i++)
{
char c = szText[i];
switch (c)
{
case '(':
case '{':
case '[':
Push(s, c);
break;
case ')':
if (Pop(s) != '(')
return 0;
break;
case '}':
if (Pop(s) != '{')
return 0;
break;
case ']':
if (Pop(s) != '[')
return 0;
break;
}
}
return 1;
}
int main()
{
char szText[100];
scanf("%s", szText);
if (Check(szText))
{
printf("合法\n");
}
else
{
printf("失败\n");
}
return 0;
}