简体   繁体   中英

Regular Expression to match the pattern

I am looking for Regular Expression search pattern to find data within $< and >$ .

string pattern = "\b\$<[^>]*>\$"; 

is not working.

Thanks,

You can make use of a tempered greedy token :

\$<(?:(?!\$<|>\$)[\s\S])*>\$

See demo

This way, you will match only the closest boundaries.

Your regex does not match because you do not allow > in-between your markers, and you are using \\b where you most probably do not have a word boundary.

If you do not want to get the delimiters in the output, use capturing group:

\$<((?:(?!\$<|>\$)[\s\S])*)>\$
   ^                      ^

And the result will be in Group 1 .

In C#, you should consider declaring all regex patterns (whenever possible) with the help of a verbatim string literal notation (with @"" ) because you won't have to worry about doubling backslashes:

var rx = new Regex(@"\$<(?:(?!\$<|>\$)[\s\S])*>\$");

Or, since there is a singleline flag (and this is preferable):

var rx = new Regex(@"\$<((?:(?!\$<|>\$).)*)>\$", RegexOptions.Singleline | RegexOptions.CultureInvariant);
var res = rx.Match(text).Select(p => p.Groups[1].Value).ToList();

This pattern will do the work:

(?<=\$<).*(?=>\$)

Demo: https://regex101.com/r/oY6mO2/1

To find this pattern in php you have this REGEX code for find any patten,

/$<(.*?)>$/s

For Example:

        $arrayWhichStoreKeyValueArrayOfYourPattern= array();
        preg_match_all('/$<(.*?)>$/s', 
        $yourcontentinwhichyoufind,         
        $arrayWhichStoreKeyValueArrayOfYourPattern);
        for($i=0;$i<count($arrayWhichStoreKeyValueArrayOfYourPattern[0]);$i++)
        {
            $content=
                     str_replace(
                      $arrayWhichStoreKeyValueArrayOfYourPattern[0][$i], 
                      constant($arrayWhichStoreKeyValueArrayOfYourPattern[1][$i]), 
                      $yourcontentinwhichyoufind);
        }

using this example you will replace value using same name constant content in this var $yourcontentinwhichyoufind

For example you have string like this which has also same named constant.

**global.php**
//in this file my constant declared.

define("MYNAME","Hiren Raiyani");
define("CONSTANT_VAL","contant value");

**demo.php**
$content="Hello this is $<MYNAME>$ and this is simple demo to replace $<CONSTANT_VAL>$";
$myarr= array();
        preg_match_all('/$<(.*?)>$/s', $content,      $myarray);
        for($i=0;$i<count($myarray[0]);$i++)
        {
            $content=str_replace(
                      $myarray[0][$i], 
                      constant($myarray[1][$i]), 
                      $content);
        }

I think as i know that's all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM