pick up specific words from string using regex match - regex

I want to pick up specific word from below string using regex. I need to match query and secondstring. I have regex like
(\w+)\s*\{([^(]+)\((.*)
{"querys":"query{secondstring(input:{
For above it works fine. But i will have to match below also using same regex.
{"query":"query{helloworld {sdsd
You can see that there is a space and { instead of (.

Related

Regular Expression match only beginning of string

I'm trying to match a regular expression on a string that has multiple matches, but i want to match the first occurrence and i'm expecting my match only in the beginning of the string
E.g.: 4_12052022_01.abc
in the above "4" is my target for a match.
But my string can also have something like 1_231233_4_43.abc, so here it should not match the occurrence of 4 because it's not in the beginning of the string.
I'm using SyncbackPro v9 and want to setup filtering through regex.
What i have tried and doesn't seem to work for me
4_.*, this matches both the strings above
^4_.*, this tests fine in most of the online regular testing websites, but in syncback it doesn't work.

Match everything but Regular Expression

Been searching for a long time, reading up about negative/positive outlook but can't get this to match everything but my regular expression.
\b[A-Z]{1}\d{3,6}[A-Z0-9]+
is the string I don't want to extract.
(?!\b[A-Z]{1}\d{3,6}[A-Z0-9]+).*
is my best attempt using Negative Outlook, but it will still match the data.
I am using this Regex on:
11/02/2019 1 475.50 453.345 Serial number : C580A0453WD7996 
AFJ_LowGuard_NewNew
End User Details:
The output I want is:
11/02/2019 1 475.50 453.345 Serial number :
AFJ_LowGuard_NewNew
End User Details:
You can either use your regex to match and replace the match with empty string, that's one approach.
Another approach that you seem to be trying is, you can use this following regex to match anything but your regex,
\b(?:(?![A-Z]\d{3,6}[A-Z0-9]+).)+\b
Demo
This will match anything except your pattern. But personally I suggest replacing by matching your pattern should be easy.
Edit:
Ok I read your comment that you want to replace anything except the string matched by your pattern. In that case you can use following regex to match everything except your pattern and replace it with empty string to get your result,
\b(?:(?![A-Z]\d{3,6}[A-Z0-9]+).)+
Demo with replacement with empty string

How can I use regex to only show characters after a specific string

I have strings that could look like this:
http://mywebsite.com/1234
http://mywebsite.com/foo
http://mywebsite.com/bar
http://google.com
I want to use a regex to only grab the strings that are preceeded with "http://mywebsite.com/" and only contain letters after that (not numbers). So in my example, the following strings would be valid:
http://mywebsite.com/foo
http://mywebsite.com/bar
so far I have a regex that looks like this:
"http://mywebsite.com/[a-zA-Z]+"
but I'm not getting any results
You just need to escape the slashes and dot using backslashes, but you should also be using $ at the end of your regex to make sure that there are no numbers (or other disallowed characters) following the match:
http:\/\/mywebsite\.com\/[a-zA-Z]+$
This does presume that you have each string occupying its own line in the input, or that there is not any other information after each string you are testing.
Try it out here
To "grab" the string after the final slash, use a capturing group:
http:\/\/mywebsite\.com\/([a-zA-Z]+)$
Try it out here
Then using your programming language, you can access the value stored in that group for each match. Or, if your regex flavour supports the \K sequence you could use:
http:\/\/mywebsite\.com\/\K[a-zA-Z]+$
to avoid the capturing group altogether.
Try it out here

Regex: ignore characters that follow

I'd like to know how can I ignore characters that follows a particular pattern in a Regex.
I tried with positive lookaheads but they do not work as they preserves those character for other matches, while I want them to be just... discarded.
For example, a part of my regex is: (?<DoubleQ>\"\".*?\"\")|(?<SingleQ>\".*?\")
in order to match some "key-parts" of this string:
This is a ""sample text"" just for "testing purposes": not to be used anywhere else.
I want to capture the entire ""sample text"", but then I want to "extract" only sample text and the same with testing purposes. That is, I want the group to match to be ""sample text"", but then I want the full match to be sample text. I partially achieved that with the use of the \K option:
(?<DoubleQ>\"\"\K.*?\"\")|(?<SingleQ>\"\K.*?\")
Which ignores the first "" (or ") from the full match but takes it into account when matching the group. How can I ignore the following "" (")?
Note: positive lookahead does not work: it does not ignore characters from the following matches, it just does not include them in the current match.
Thanks a lot.
I hope I got your questions right. So you want to match the whole string including the quotes, but you want to replace/extract it only the expression without the quotes, right?
You typically can use the regex replace functionality to extract just a part of the match.
This is the regex expression:
""?(.*?)""?
And this the replace expression:
$1

Regex for a string followed by another string (separated by any number of spaces) without using capture groups

I am trying to get the 2nd string in a line where there are 2 strings are separated by any number of spaces
e.g.
test1 test2
In this case i want a regex to match "test2" without matching any of the spaces and without using capture groups
I've tried
(?<=\s).*
but this only gets rid of the first space, I also tried
(?<=\s+).* or (?<=\s*).*
but regex101.com says
Lookbehinds need to be zero-width, thus quantifiers are not allowed
is there a way to achieve this?
You don't really need to match multiple space in lookbehind. Following regex does the job:
(?<=\s)\S+
RegEx Demo