正则表达式匹配模式

时间:2015-08-12 12:53:19

标签: c# regex

我正在寻找正则表达式搜索模式来查找$<>$中的数据。

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

无效。

谢谢,

3 个答案:

答案 0 :(得分:1)

您可以使用tempered greedy token

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

请参阅demo

这样,您将只匹配最近的边界。

您的正则表达式不匹配,因为您的标记之间不允许>,并且您正在使用\b,而您很可能没有单词边界。

如果您不想在输出中获取分隔符,请使用捕获组:

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

结果will be in Group 1

在C#中,你应该考虑使用逐字字符串文字表示法(@"")来声明所有正则表达式模式(只要有可能),因为你不必担心加倍反斜杠:

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

或者,因为有一个单行标志(这是可取的):

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

答案 1 :(得分:0)

这种模式可以完成工作:

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

演示:https://regex101.com/r/oY6mO2/1

答案 2 :(得分:0)

要在php中找到此模式,您可以使用此REGEX代码查找任何模式,

/ $≤(?*)&GT; $ / S

例如:

        $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);
        }

使用此示例,您将使用此var $ yourcontentinwhichyoufind

中的相同名称常量内容替换值

例如,您有这样的字符串,它也具有相同的命名常量。

**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);
        }

我想我知道就是这样。