Can regex match to a specific character but not return in the result?

regex match two specific characters
regex negative lookahead
regex match exactly 3 characters
regular expression match
regex match string containing word
regex does not contain
regex special characters
regex exact match

I have a string:

"abc3-3213dsads123dsdsaasa7/basic-2.xhtml?"

I want to obtain:

"abc3-3213dsads123dsdsaasa7"

where the length of the "abc3" and "3213dsads123dsdsaasa7" is arbitrary. I'm using this in a constraint in my routes file.

I tried:

.+-.+[\/]

However, it includes the / at the end. Is it possible to match a character in a regex but ignore it in the result?

You can use:

^(\w+)-(\w+)

Demo: https://regex101.com/r/xGCTbY/2

If you do not need to capture sub parts of the string you can remove the ( )

Assumption: There is no other character at the beginning of your string, otherwise the constraint ^ will not work here and you should use a positive (?=\/) lookahead.

Also \w will only match word characters so you might want to replace it with . or in more general: ^[^\/-]+-[^\/-]+ to take everything until you reach the first slash.

How to match, but not capture, part of a regex?, The only way not to capture something is using look-around assertions: But this regular expression matches only apple or banana if it's preceded by 123- and 456/. Remember that the result is in group 1 That will match apple , banana , or a blank string, and following it there will be a 0 or 1 hyphens. Regular Expression to Given a list of strings (words or other characters), only return the strings that do not match.

str = "abc3-3213dsads123dsdsaasa7/basic-2.xhtml?"

str[/.+(?=\/)/]
  #=> "abc3-3213dsads123dsdsaasa7"

(?=\/) is a positive lookahead. It requires that the matched string be followed by a forward slash.

Alternatively, depending on needs, you could use the regular expression /[^\/]+/ or /.+?-[^\/]+/.

You can also do this easily without using a regular expression.

str[0, str.index('/')]
 #=> "abc3-3213dsads123dsdsaasa7"

I have assumed there are no restrictions on the characters that precede the forward slash. This conforms with restrictions on the naming of files in the Unix family (including Linux and OS/X), namely, file names can include any characters other than the forward slash and NUL. See here and here. Windows' restrictions on file names are discussed here.

Regex to Test The Same Part of The String for More Than One , The third and last \b are guaranteed to match. Since word boundaries are zero-​length, and therefore do not change the result returned by the regex engine, we  While using the regular expression the first thing is to recognize is that everything is essentially a character, and we are writing patterns to match a specific sequence of characters also referred as string. Ascii or latin letters are those that are on your keyboards and Unicode is used to match the foreign text.

I would go with this without using a regex:

str = "abc3-3213dsads123dsdsaasa7/basic-2.xhtml?"

str.partition("/").first
# => "abc3-3213dsads123dsdsaasa7"

The Best Regex Trick, Describes a regular expressions technique to match a word or pattern except in In contrast, a "trick" is not a single point of syntax such as a negated character As desired, this expression can match Tarzan, "Tarzan, Tarzan" but not "Tarzan​". language returns the results, we ignore the overall matches (that's the trash  Regex tutorial — A quick cheatsheet by examples. and the other side is not a word character but r will not be part of the overall regex match -> Try it!

Documentation: 9.0: Pattern Matching, The LIKE expression returns true if the string matches the supplied pattern. Does not match regular expression, case insensitive, 'thomas' !~* '. language — but regular expressions use different special characters than LIKE does. function returns a text array of all of the captured substrings resulting from matching a  To represent this, we use a similar expression that excludes specific characters using the square brackets and the ^ (hat). For example, the pattern [^abc] will match any single character except for the letters a, b, or c. With the strings below, try writing a pattern that matches only the live animals (hog, dog, but not bog).

preg_match_all - Manual, preg_match_all — Perform a global regular expression match subject for all matches to the regular expression given in pattern and puts them in matches Orders results so that $matches[0] is an array of full pattern matches, If this flag is passed, for every occurring match the appendant string offset will also be returned. If I understand what you're asking, I can think of four ways to use the Formula tool to make a new output field that contains the text you're searching for. 1) Regex_Match if regex_match([InputData],".*long.*") then 'long' else null() endif

(Tutorial) Python Regular Expression, Discover the power of regular expressions with this tutorial. Special characters are characters that do not match themselves as seen but have a special meaning when used in a regular The group function returns the string matched by the re. However, the code below will not give the same result. The fact that a regular expression matches a string if the pattern is found anywhere in the string means you must take care not to inadvertently specify a pattern that matches the empty string. If you do, it will match any non- NULL value at all. For example, the pattern a* matches any number of a characters, even none.

Comments
  • (?:string)...
  • Just tried .+-.+(?:\/) still returns the /
  • Do (.+-.+)(?:\/) and return match group 1...
  • The question clearly states: "Is it actually possible with regex to use a character to match but ignore it in the result?" —and Cary has answered this particular question: positive lookahead. That said, either the question should be restated, or Cary’s answer should be marked as correct.
  • Not sure how a line break is relevant to the issue.
  • str.index('/') is maybe the best solution here +1!