Regex how to ignore multiple ( )?
I'm using this regex string:
/rfi .*?(.*) .*?((.*))/i
Group 1 finds the rfi number & group 2 returns the contents inside the ( ).
With test string: "New RFI 087 (Concrete Beam at Planter)" everything works fine,
but with test string "New RFI 087 (Concrete (Beam) at Planter)" it crashes.
Is there anyway to search inside the ( ) but ignore multiple ( ) inside of it ?
regex
|
show 1 more comment
I'm using this regex string:
/rfi .*?(.*) .*?((.*))/i
Group 1 finds the rfi number & group 2 returns the contents inside the ( ).
With test string: "New RFI 087 (Concrete Beam at Planter)" everything works fine,
but with test string "New RFI 087 (Concrete (Beam) at Planter)" it crashes.
Is there anyway to search inside the ( ) but ignore multiple ( ) inside of it ?
regex
Use/rfi (.*?) .*?((.*))/i(demo), make your Group 1 pattern lazy. Also, the first.*?is redundant, remove it.
– Wiktor Stribiżew
Nov 14 '18 at 20:24
This requires a recursive regex, which engine ?
– sln
Nov 14 '18 at 20:25
@sln, reclose as a dupe of stackoverflow.com/questions/22444/…, the only thing OP needs is lazy quantifier with Group 1. No recursion required. No need to reopen evident duplicates.
– Wiktor Stribiżew
Nov 14 '18 at 20:31
if you have access to a PCRE or Perl style engine, use this ((((?:[^()]++|(?1))*))). if a Java style engine, use this (?=()(?:(?=.*?((?!.*?1)(.*)(?!.*2).*))(?=.*?)(?!.*?2)(.*)).)+?.*?(?=1)[^(]*(?=2$)
– sln
Nov 14 '18 at 20:33
search inside the ( ) but ignore multiple ( ) inside of itis a RECURSION question NOT a quantifier question. This is about balanced text !!
– sln
Nov 14 '18 at 20:40
|
show 1 more comment
I'm using this regex string:
/rfi .*?(.*) .*?((.*))/i
Group 1 finds the rfi number & group 2 returns the contents inside the ( ).
With test string: "New RFI 087 (Concrete Beam at Planter)" everything works fine,
but with test string "New RFI 087 (Concrete (Beam) at Planter)" it crashes.
Is there anyway to search inside the ( ) but ignore multiple ( ) inside of it ?
regex
I'm using this regex string:
/rfi .*?(.*) .*?((.*))/i
Group 1 finds the rfi number & group 2 returns the contents inside the ( ).
With test string: "New RFI 087 (Concrete Beam at Planter)" everything works fine,
but with test string "New RFI 087 (Concrete (Beam) at Planter)" it crashes.
Is there anyway to search inside the ( ) but ignore multiple ( ) inside of it ?
regex
regex
asked Nov 14 '18 at 20:18
Barry RalphsBarry Ralphs
446
446
Use/rfi (.*?) .*?((.*))/i(demo), make your Group 1 pattern lazy. Also, the first.*?is redundant, remove it.
– Wiktor Stribiżew
Nov 14 '18 at 20:24
This requires a recursive regex, which engine ?
– sln
Nov 14 '18 at 20:25
@sln, reclose as a dupe of stackoverflow.com/questions/22444/…, the only thing OP needs is lazy quantifier with Group 1. No recursion required. No need to reopen evident duplicates.
– Wiktor Stribiżew
Nov 14 '18 at 20:31
if you have access to a PCRE or Perl style engine, use this ((((?:[^()]++|(?1))*))). if a Java style engine, use this (?=()(?:(?=.*?((?!.*?1)(.*)(?!.*2).*))(?=.*?)(?!.*?2)(.*)).)+?.*?(?=1)[^(]*(?=2$)
– sln
Nov 14 '18 at 20:33
search inside the ( ) but ignore multiple ( ) inside of itis a RECURSION question NOT a quantifier question. This is about balanced text !!
– sln
Nov 14 '18 at 20:40
|
show 1 more comment
Use/rfi (.*?) .*?((.*))/i(demo), make your Group 1 pattern lazy. Also, the first.*?is redundant, remove it.
– Wiktor Stribiżew
Nov 14 '18 at 20:24
This requires a recursive regex, which engine ?
– sln
Nov 14 '18 at 20:25
@sln, reclose as a dupe of stackoverflow.com/questions/22444/…, the only thing OP needs is lazy quantifier with Group 1. No recursion required. No need to reopen evident duplicates.
– Wiktor Stribiżew
Nov 14 '18 at 20:31
if you have access to a PCRE or Perl style engine, use this ((((?:[^()]++|(?1))*))). if a Java style engine, use this (?=()(?:(?=.*?((?!.*?1)(.*)(?!.*2).*))(?=.*?)(?!.*?2)(.*)).)+?.*?(?=1)[^(]*(?=2$)
– sln
Nov 14 '18 at 20:33
search inside the ( ) but ignore multiple ( ) inside of itis a RECURSION question NOT a quantifier question. This is about balanced text !!
– sln
Nov 14 '18 at 20:40
Use
/rfi (.*?) .*?((.*))/i (demo), make your Group 1 pattern lazy. Also, the first .*? is redundant, remove it.– Wiktor Stribiżew
Nov 14 '18 at 20:24
Use
/rfi (.*?) .*?((.*))/i (demo), make your Group 1 pattern lazy. Also, the first .*? is redundant, remove it.– Wiktor Stribiżew
Nov 14 '18 at 20:24
This requires a recursive regex, which engine ?
– sln
Nov 14 '18 at 20:25
This requires a recursive regex, which engine ?
– sln
Nov 14 '18 at 20:25
@sln, reclose as a dupe of stackoverflow.com/questions/22444/…, the only thing OP needs is lazy quantifier with Group 1. No recursion required. No need to reopen evident duplicates.
– Wiktor Stribiżew
Nov 14 '18 at 20:31
@sln, reclose as a dupe of stackoverflow.com/questions/22444/…, the only thing OP needs is lazy quantifier with Group 1. No recursion required. No need to reopen evident duplicates.
– Wiktor Stribiżew
Nov 14 '18 at 20:31
if you have access to a PCRE or Perl style engine, use this ((((?:[^()]++|(?1))*))). if a Java style engine, use this (?=()(?:(?=.*?((?!.*?1)(.*)(?!.*2).*))(?=.*?)(?!.*?2)(.*)).)+?.*?(?=1)[^(]*(?=2$)
– sln
Nov 14 '18 at 20:33
if you have access to a PCRE or Perl style engine, use this ((((?:[^()]++|(?1))*))). if a Java style engine, use this (?=()(?:(?=.*?((?!.*?1)(.*)(?!.*2).*))(?=.*?)(?!.*?2)(.*)).)+?.*?(?=1)[^(]*(?=2$)
– sln
Nov 14 '18 at 20:33
search inside the ( ) but ignore multiple ( ) inside of it is a RECURSION question NOT a quantifier question. This is about balanced text !!– sln
Nov 14 '18 at 20:40
search inside the ( ) but ignore multiple ( ) inside of it is a RECURSION question NOT a quantifier question. This is about balanced text !!– sln
Nov 14 '18 at 20:40
|
show 1 more comment
1 Answer
1
active
oldest
votes
You can match your strings by making your Group 1 pattern lazy. Also, the first .*? is redundant, remove it.
Use
/rfi (.*?) .*?((.*))/i
See the regex demo
@sln suggests using a regex with a subroutine, but these features are not quite popular with regex engines, Ruby Onigmo or PCRE support them, for example.
/rfi (.*?) .*?(((?:[^()]++|(?2))*))/i
Or a bit more "cross library" (since Onigmo supports g<X> recursive construct, same as PCRE)
/rfi (.*?) .*?(((?:[^()]++|g<2>)*))/i
See this demo.
but these features are not quite popular with regex enginesWhat does this mean ?
– sln
Nov 14 '18 at 21:06
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53308134%2fregex-how-to-ignore-multiple%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can match your strings by making your Group 1 pattern lazy. Also, the first .*? is redundant, remove it.
Use
/rfi (.*?) .*?((.*))/i
See the regex demo
@sln suggests using a regex with a subroutine, but these features are not quite popular with regex engines, Ruby Onigmo or PCRE support them, for example.
/rfi (.*?) .*?(((?:[^()]++|(?2))*))/i
Or a bit more "cross library" (since Onigmo supports g<X> recursive construct, same as PCRE)
/rfi (.*?) .*?(((?:[^()]++|g<2>)*))/i
See this demo.
but these features are not quite popular with regex enginesWhat does this mean ?
– sln
Nov 14 '18 at 21:06
add a comment |
You can match your strings by making your Group 1 pattern lazy. Also, the first .*? is redundant, remove it.
Use
/rfi (.*?) .*?((.*))/i
See the regex demo
@sln suggests using a regex with a subroutine, but these features are not quite popular with regex engines, Ruby Onigmo or PCRE support them, for example.
/rfi (.*?) .*?(((?:[^()]++|(?2))*))/i
Or a bit more "cross library" (since Onigmo supports g<X> recursive construct, same as PCRE)
/rfi (.*?) .*?(((?:[^()]++|g<2>)*))/i
See this demo.
but these features are not quite popular with regex enginesWhat does this mean ?
– sln
Nov 14 '18 at 21:06
add a comment |
You can match your strings by making your Group 1 pattern lazy. Also, the first .*? is redundant, remove it.
Use
/rfi (.*?) .*?((.*))/i
See the regex demo
@sln suggests using a regex with a subroutine, but these features are not quite popular with regex engines, Ruby Onigmo or PCRE support them, for example.
/rfi (.*?) .*?(((?:[^()]++|(?2))*))/i
Or a bit more "cross library" (since Onigmo supports g<X> recursive construct, same as PCRE)
/rfi (.*?) .*?(((?:[^()]++|g<2>)*))/i
See this demo.
You can match your strings by making your Group 1 pattern lazy. Also, the first .*? is redundant, remove it.
Use
/rfi (.*?) .*?((.*))/i
See the regex demo
@sln suggests using a regex with a subroutine, but these features are not quite popular with regex engines, Ruby Onigmo or PCRE support them, for example.
/rfi (.*?) .*?(((?:[^()]++|(?2))*))/i
Or a bit more "cross library" (since Onigmo supports g<X> recursive construct, same as PCRE)
/rfi (.*?) .*?(((?:[^()]++|g<2>)*))/i
See this demo.
answered Nov 14 '18 at 20:40
community wiki
Wiktor Stribiżew
but these features are not quite popular with regex enginesWhat does this mean ?
– sln
Nov 14 '18 at 21:06
add a comment |
but these features are not quite popular with regex enginesWhat does this mean ?
– sln
Nov 14 '18 at 21:06
but these features are not quite popular with regex engines What does this mean ?– sln
Nov 14 '18 at 21:06
but these features are not quite popular with regex engines What does this mean ?– sln
Nov 14 '18 at 21:06
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53308134%2fregex-how-to-ignore-multiple%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Use
/rfi (.*?) .*?((.*))/i(demo), make your Group 1 pattern lazy. Also, the first.*?is redundant, remove it.– Wiktor Stribiżew
Nov 14 '18 at 20:24
This requires a recursive regex, which engine ?
– sln
Nov 14 '18 at 20:25
@sln, reclose as a dupe of stackoverflow.com/questions/22444/…, the only thing OP needs is lazy quantifier with Group 1. No recursion required. No need to reopen evident duplicates.
– Wiktor Stribiżew
Nov 14 '18 at 20:31
if you have access to a PCRE or Perl style engine, use this ((((?:[^()]++|(?1))*))). if a Java style engine, use this (?=()(?:(?=.*?((?!.*?1)(.*)(?!.*2).*))(?=.*?)(?!.*?2)(.*)).)+?.*?(?=1)[^(]*(?=2$)
– sln
Nov 14 '18 at 20:33
search inside the ( ) but ignore multiple ( ) inside of itis a RECURSION question NOT a quantifier question. This is about balanced text !!– sln
Nov 14 '18 at 20:40