httpinterpret
httpinterpret

Reputation: 6709

How do I get the substr this way in c?

/^[^\s]+\s([^\s]+)\s/

In PHP,I can use regex to get the substr by $1,

how should I do it in C?

It's better if can do it without regex,though.

UPDATE

Put simply, how do I get werwerur out of swerwer werwerur y (the second)?

Upvotes: 5

Views: 338

Answers (5)

Giórgenes
Giórgenes

Reputation: 66

If you are using a posix/unix system like Linux, you could use the regex API directly:

$> man 3 regex

Or google for regcomp() or regexec().

Upvotes: 0

Oleg Razgulyaev
Oleg Razgulyaev

Reputation: 5935

I recommend to use strchr() - it is very fast to find characters in strings

#include <string.h>
..
char str[] = "swerwer werwerur y";
char *p1 = NULL,*p2 = NULL;

p1 = strchr(str,' ');
p1++;
p2 = strchr(p1,' ');
if(p2) *p2 = 0;

printf("found: %s\n", p1);

if you have multiple delimiters, you can use strtok_r() or strpbrk() as in example below:

    char str[] = "swerwer ., werwerur + y";
    const char *dlms = " .,+";
    char *p1 = NULL,*p2 = NULL;

    p1 = strpbrk(str,dlms);
    while(strchr(dlms,*p1)) p1++;
    p2 = strpbrk(p1,dlms);
    if(p2) *p2 = 0;

    printf("found: %s\n", p1);

(should cleanup code: in case if strpbrk returns NULL)

Upvotes: 2

Simon
Simon

Reputation: 9365

You could look for spaces in a char-string by using this:

char* strText = "word1 word2 word3";
int iTextLen = strlen(strText);
for(int i = 0; i < iTextLen; i++)
{
    if(strText[i] == ' ') //is it a space-character
    {
        //save position or whatever
    }
}

If you're looking for the second word, you just have to save the positions of the first space and of the second space and get the character string at the indices between the two.

Upvotes: 0

Jerry Coffin
Jerry Coffin

Reputation: 490048

If I understand what you want correctly, sscanf should be able to do the job:

char result[256];  
sscanf("swerwer werwerur y", "%*s %255s", result);

Upvotes: 0

WhirlWind
WhirlWind

Reputation: 14112

Use strtok() to find the spaces.

Strtok man page:

#include <string.h>
...
char *token;
char *line = "LINE TO BE SEPARATED";
char *search = " ";


/* Token will point to "LINE". */
token = strtok(line, search);


/* Token will point to "TO". */
token = strtok(NULL, search);

Upvotes: 2

Related Questions