简体   繁体   English

使用或操作创建正则表达式

[英]Creating regular expression with or operation

I want to read file if the following pattern.如果以下模式,我想读取文件。

Here is file1.text这是file1.text

Abc,192.168.99.4   
Eyo,192.168.8.16,3370    
Opa,4447    
Ctc,192.168.66.2,5507

Here is my code that is working for single, .这是我的代码,适用于单身,. Var3 is not displaying any value.I am putting or operation between two and three values regular expresion. Var3 没有显示任何值。我在两个和三个值正则表达式之间放置操作。

    if(EOF == fscanf(mf," %[^,],%s,%s | %[^,], %[^,] %[^,],%s,%s,%s", var1,var2,var3)){
      printf("var2=%s\n",var2);
      printf(" var1=%s\n",var1);
      printf(" var3=%s\n",var3);   
   }

The code is producing output代码生成 output

Var2=Abc

Var1=192.168.99.4

Var3=

Var2=Eyo

Var1=192.168.8.16,3370

Var3=

Var2=Opa

Var1=4447

Var3=

Var2=Ctc

Var1=192.168.66.2,5507

Var3=  

How to split into two comma separated into 3 values?如何拆分成两个逗号分隔成 3 个值?

... Var3 is not displaying any value.I am putting or operation between two and three values regular expresion. ... Var3 未显示任何值。我在两个和三个值正则表达式之间放置或操作。

Save time.省时间。 Enable all compiler warnings to see its trouble of mis-matched specifiers and arguments.启用所有编译器警告以查看其错误匹配的说明符和 arguments 的问题。

if(EOF == fscanf(mf," %[^,],%s,%s | %[^,], %[^,] %[^,],%s,%s,%s",
    var1,var2,var3)){

My question is simple how to read above text file in c using file datatype.??我的问题很简单,如何使用文件数据类型读取 c 中的上述文本文件。??

To read , use fgets() to read a line of the file into a string .读取,请使用fgets()将文件的一行读入字符串

Then parse that string multiple times to find the matching form.然后多次解析该字符串以找到匹配的形式。

Never scan with "%[...]" or "%s" without a width .切勿使用没有宽度"%[...]""%s"进行扫描。

char var1[3 + 1] = { 0 };  // Prefix
int var2[4] = { 0 };       // IP
int var3 = 0;              // Port  

#define IFMT_PRE  " %3[^,]"
#define IFMT_IP   ",%3d .%3d .%3d .%3d"
#define IFMT_PORT " ,%d"
#define OFMT_PRE  "%s"
#define OFMT_IP   ",%d.%d.%d.%d"
#define OFMT_PORT ",%d"

// Use " %n" to detect if scanning completed.

int n = 0;
sscanf(buf, IFMT_PRE IFMT_IP IFMT_PORT " %n",
    var1, &var2[0], &var2[1], &var2[2], &var2[3], &var3, &n);
if (n > 0 && buf[n] == '\0') {
  // Successfully scanned prefix, IP and port.
  printf(OFMT_PRE OFMT_IP OFMT_PORT "\n",
      var1, var2[0], var2[1], var2[2], var2[3], var3);
  return 0;
}

n = 0;
sscanf(buf, IFMT_PRE IFMT_IP " %n",
    var1, &var2[0], &var2[1], &var2[2], &var2[3], &n);
if (n > 0 && buf[n] == '\0') {
  // Successfully scanned prefix and IP.
  printf(OFMT_PRE OFMT_IP "\n",
      var1, var2[0], var2[1], var2[2], var2[3]);
  return 0;
}

n = 0;
sscanf(buf, IFMT_PRE IFMT_PORT " %n",
    var1, &var3, &n);
if (n > 0 && buf[n] == '\0') {
  // Successfully scanned prefix, and port.
  printf(OFMT_PRE OFMT_PORT "\n",
      var1, var3);
  return 0;
}

printf("Failed all 3.\n");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM