How do I make a perl regular expresion fail in the code block?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I've got a screw I'm trying to nail in with perl and so far this is what I've got so far.
perl -ne '/(.+).(.+)((.+))(.+)(?{print "match" if ( $1 > 9 || ( $1 == 9 && $2 > 1 ) || ($1 == 9 && $2 == 1 && $3 > 7 ) || $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22 ) })/' versions
versions:
9.1(7)23
9.1(7)22
8.1(7)22
7.2(33)24
55
it will print "match" if the version in the file is > than 9.1(7)23, which is good.
But I want the regexp to succeed, not just print "match". How do I translate the stuff inside the code block to an actual response. I've tried quite a few iterations with *ACCEPT|*FAIL
but nothing has worked so far.
perl pcre
add a comment |
I've got a screw I'm trying to nail in with perl and so far this is what I've got so far.
perl -ne '/(.+).(.+)((.+))(.+)(?{print "match" if ( $1 > 9 || ( $1 == 9 && $2 > 1 ) || ($1 == 9 && $2 == 1 && $3 > 7 ) || $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22 ) })/' versions
versions:
9.1(7)23
9.1(7)22
8.1(7)22
7.2(33)24
55
it will print "match" if the version in the file is > than 9.1(7)23, which is good.
But I want the regexp to succeed, not just print "match". How do I translate the stuff inside the code block to an actual response. I've tried quite a few iterations with *ACCEPT|*FAIL
but nothing has worked so far.
perl pcre
Maybe using(??{})
instead of(?{})
:/(.+).(.+)((.+))(.+)(??{ your_condition ? "" : "(*FAIL)"})/
? I mean, this is OK if you are writing some quick one-liner for a one time job; but if this is supposed to be maintainable, production code, then don't try to do this with just a regex of course ;)
– Dada
Nov 16 '18 at 19:01
(peharps"(*ACCEPT)"
instead of""
. Both work, and I have no opinion on which is "better".ACCEPT
is more explicit I guess; but since you are writing something not readable at all, does it really matter?)
– Dada
Nov 16 '18 at 19:12
@dada yeah, it's gotta be a one liner. I'm injecting into some version matching thing into some script to help a network guy out using their own tools. But that totally worked, thanks a lot you want to make it a legit answer to get credit?
– Peter Turner
Nov 16 '18 at 19:13
add a comment |
I've got a screw I'm trying to nail in with perl and so far this is what I've got so far.
perl -ne '/(.+).(.+)((.+))(.+)(?{print "match" if ( $1 > 9 || ( $1 == 9 && $2 > 1 ) || ($1 == 9 && $2 == 1 && $3 > 7 ) || $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22 ) })/' versions
versions:
9.1(7)23
9.1(7)22
8.1(7)22
7.2(33)24
55
it will print "match" if the version in the file is > than 9.1(7)23, which is good.
But I want the regexp to succeed, not just print "match". How do I translate the stuff inside the code block to an actual response. I've tried quite a few iterations with *ACCEPT|*FAIL
but nothing has worked so far.
perl pcre
I've got a screw I'm trying to nail in with perl and so far this is what I've got so far.
perl -ne '/(.+).(.+)((.+))(.+)(?{print "match" if ( $1 > 9 || ( $1 == 9 && $2 > 1 ) || ($1 == 9 && $2 == 1 && $3 > 7 ) || $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22 ) })/' versions
versions:
9.1(7)23
9.1(7)22
8.1(7)22
7.2(33)24
55
it will print "match" if the version in the file is > than 9.1(7)23, which is good.
But I want the regexp to succeed, not just print "match". How do I translate the stuff inside the code block to an actual response. I've tried quite a few iterations with *ACCEPT|*FAIL
but nothing has worked so far.
perl pcre
perl pcre
asked Nov 16 '18 at 18:41
Peter TurnerPeter Turner
5,022855102
5,022855102
Maybe using(??{})
instead of(?{})
:/(.+).(.+)((.+))(.+)(??{ your_condition ? "" : "(*FAIL)"})/
? I mean, this is OK if you are writing some quick one-liner for a one time job; but if this is supposed to be maintainable, production code, then don't try to do this with just a regex of course ;)
– Dada
Nov 16 '18 at 19:01
(peharps"(*ACCEPT)"
instead of""
. Both work, and I have no opinion on which is "better".ACCEPT
is more explicit I guess; but since you are writing something not readable at all, does it really matter?)
– Dada
Nov 16 '18 at 19:12
@dada yeah, it's gotta be a one liner. I'm injecting into some version matching thing into some script to help a network guy out using their own tools. But that totally worked, thanks a lot you want to make it a legit answer to get credit?
– Peter Turner
Nov 16 '18 at 19:13
add a comment |
Maybe using(??{})
instead of(?{})
:/(.+).(.+)((.+))(.+)(??{ your_condition ? "" : "(*FAIL)"})/
? I mean, this is OK if you are writing some quick one-liner for a one time job; but if this is supposed to be maintainable, production code, then don't try to do this with just a regex of course ;)
– Dada
Nov 16 '18 at 19:01
(peharps"(*ACCEPT)"
instead of""
. Both work, and I have no opinion on which is "better".ACCEPT
is more explicit I guess; but since you are writing something not readable at all, does it really matter?)
– Dada
Nov 16 '18 at 19:12
@dada yeah, it's gotta be a one liner. I'm injecting into some version matching thing into some script to help a network guy out using their own tools. But that totally worked, thanks a lot you want to make it a legit answer to get credit?
– Peter Turner
Nov 16 '18 at 19:13
Maybe using
(??{})
instead of (?{})
: /(.+).(.+)((.+))(.+)(??{ your_condition ? "" : "(*FAIL)"})/
? I mean, this is OK if you are writing some quick one-liner for a one time job; but if this is supposed to be maintainable, production code, then don't try to do this with just a regex of course ;)– Dada
Nov 16 '18 at 19:01
Maybe using
(??{})
instead of (?{})
: /(.+).(.+)((.+))(.+)(??{ your_condition ? "" : "(*FAIL)"})/
? I mean, this is OK if you are writing some quick one-liner for a one time job; but if this is supposed to be maintainable, production code, then don't try to do this with just a regex of course ;)– Dada
Nov 16 '18 at 19:01
(peharps
"(*ACCEPT)"
instead of ""
. Both work, and I have no opinion on which is "better". ACCEPT
is more explicit I guess; but since you are writing something not readable at all, does it really matter?)– Dada
Nov 16 '18 at 19:12
(peharps
"(*ACCEPT)"
instead of ""
. Both work, and I have no opinion on which is "better". ACCEPT
is more explicit I guess; but since you are writing something not readable at all, does it really matter?)– Dada
Nov 16 '18 at 19:12
@dada yeah, it's gotta be a one liner. I'm injecting into some version matching thing into some script to help a network guy out using their own tools. But that totally worked, thanks a lot you want to make it a legit answer to get credit?
– Peter Turner
Nov 16 '18 at 19:13
@dada yeah, it's gotta be a one liner. I'm injecting into some version matching thing into some script to help a network guy out using their own tools. But that totally worked, thanks a lot you want to make it a legit answer to get credit?
– Peter Turner
Nov 16 '18 at 19:13
add a comment |
1 Answer
1
active
oldest
votes
First of all, the regex does succeed. But it does so whether the condition is true or not. I think you're actually asking for it to fail when the condition is false. For that, you want
(?(?{ condition })(*ACCEPT)|(*FAIL))
or just
(?(?{ !condition })(*FAIL))
Fixed:
perl -nle'
print "$_: match"
if /
^(.+).(.+)((.+))(.+)z
(?(?{
!( $1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
)
})(*FAIL))
/x;
' versions
A far better approach is to do the check outside of the pattern.
perl -nle'
print "$_: match"
if /^(.+).(.+)((.+))(.+)z/
&& (
$1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
);
' versions
from my undrstanding(*FAIL)
will just force to backtrack maybe(*SKIP)(*FAIL)
– Nahuel Fouilleul
Nov 19 '18 at 15:50
@NahuelFouilleul, No idea what it does, but it's not needed
– ikegami
Nov 19 '18 at 19:28
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%2f53343632%2fhow-do-i-make-a-perl-regular-expresion-fail-in-the-code-block%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
First of all, the regex does succeed. But it does so whether the condition is true or not. I think you're actually asking for it to fail when the condition is false. For that, you want
(?(?{ condition })(*ACCEPT)|(*FAIL))
or just
(?(?{ !condition })(*FAIL))
Fixed:
perl -nle'
print "$_: match"
if /
^(.+).(.+)((.+))(.+)z
(?(?{
!( $1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
)
})(*FAIL))
/x;
' versions
A far better approach is to do the check outside of the pattern.
perl -nle'
print "$_: match"
if /^(.+).(.+)((.+))(.+)z/
&& (
$1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
);
' versions
from my undrstanding(*FAIL)
will just force to backtrack maybe(*SKIP)(*FAIL)
– Nahuel Fouilleul
Nov 19 '18 at 15:50
@NahuelFouilleul, No idea what it does, but it's not needed
– ikegami
Nov 19 '18 at 19:28
add a comment |
First of all, the regex does succeed. But it does so whether the condition is true or not. I think you're actually asking for it to fail when the condition is false. For that, you want
(?(?{ condition })(*ACCEPT)|(*FAIL))
or just
(?(?{ !condition })(*FAIL))
Fixed:
perl -nle'
print "$_: match"
if /
^(.+).(.+)((.+))(.+)z
(?(?{
!( $1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
)
})(*FAIL))
/x;
' versions
A far better approach is to do the check outside of the pattern.
perl -nle'
print "$_: match"
if /^(.+).(.+)((.+))(.+)z/
&& (
$1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
);
' versions
from my undrstanding(*FAIL)
will just force to backtrack maybe(*SKIP)(*FAIL)
– Nahuel Fouilleul
Nov 19 '18 at 15:50
@NahuelFouilleul, No idea what it does, but it's not needed
– ikegami
Nov 19 '18 at 19:28
add a comment |
First of all, the regex does succeed. But it does so whether the condition is true or not. I think you're actually asking for it to fail when the condition is false. For that, you want
(?(?{ condition })(*ACCEPT)|(*FAIL))
or just
(?(?{ !condition })(*FAIL))
Fixed:
perl -nle'
print "$_: match"
if /
^(.+).(.+)((.+))(.+)z
(?(?{
!( $1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
)
})(*FAIL))
/x;
' versions
A far better approach is to do the check outside of the pattern.
perl -nle'
print "$_: match"
if /^(.+).(.+)((.+))(.+)z/
&& (
$1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
);
' versions
First of all, the regex does succeed. But it does so whether the condition is true or not. I think you're actually asking for it to fail when the condition is false. For that, you want
(?(?{ condition })(*ACCEPT)|(*FAIL))
or just
(?(?{ !condition })(*FAIL))
Fixed:
perl -nle'
print "$_: match"
if /
^(.+).(.+)((.+))(.+)z
(?(?{
!( $1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
)
})(*FAIL))
/x;
' versions
A far better approach is to do the check outside of the pattern.
perl -nle'
print "$_: match"
if /^(.+).(.+)((.+))(.+)z/
&& (
$1 > 9
|| $1 == 9 && $2 > 1
|| $1 == 9 && $2 == 1 && $3 > 7
|| $1 == 9 && $2 == 1 && $3 == 7 && $4 > 22
);
' versions
edited Nov 16 '18 at 21:54
answered Nov 16 '18 at 19:49
ikegamiikegami
268k11181407
268k11181407
from my undrstanding(*FAIL)
will just force to backtrack maybe(*SKIP)(*FAIL)
– Nahuel Fouilleul
Nov 19 '18 at 15:50
@NahuelFouilleul, No idea what it does, but it's not needed
– ikegami
Nov 19 '18 at 19:28
add a comment |
from my undrstanding(*FAIL)
will just force to backtrack maybe(*SKIP)(*FAIL)
– Nahuel Fouilleul
Nov 19 '18 at 15:50
@NahuelFouilleul, No idea what it does, but it's not needed
– ikegami
Nov 19 '18 at 19:28
from my undrstanding
(*FAIL)
will just force to backtrack maybe (*SKIP)(*FAIL)
– Nahuel Fouilleul
Nov 19 '18 at 15:50
from my undrstanding
(*FAIL)
will just force to backtrack maybe (*SKIP)(*FAIL)
– Nahuel Fouilleul
Nov 19 '18 at 15:50
@NahuelFouilleul, No idea what it does, but it's not needed
– ikegami
Nov 19 '18 at 19:28
@NahuelFouilleul, No idea what it does, but it's not needed
– ikegami
Nov 19 '18 at 19:28
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%2f53343632%2fhow-do-i-make-a-perl-regular-expresion-fail-in-the-code-block%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
Maybe using
(??{})
instead of(?{})
:/(.+).(.+)((.+))(.+)(??{ your_condition ? "" : "(*FAIL)"})/
? I mean, this is OK if you are writing some quick one-liner for a one time job; but if this is supposed to be maintainable, production code, then don't try to do this with just a regex of course ;)– Dada
Nov 16 '18 at 19:01
(peharps
"(*ACCEPT)"
instead of""
. Both work, and I have no opinion on which is "better".ACCEPT
is more explicit I guess; but since you are writing something not readable at all, does it really matter?)– Dada
Nov 16 '18 at 19:12
@dada yeah, it's gotta be a one liner. I'm injecting into some version matching thing into some script to help a network guy out using their own tools. But that totally worked, thanks a lot you want to make it a legit answer to get credit?
– Peter Turner
Nov 16 '18 at 19:13