我正在寻找正则表达式搜索模式来查找$<
和>$
中的数据。
string pattern = "\b\$<[^>]*>\$";
无效。
谢谢,
答案 0 :(得分:1)
您可以使用tempered greedy token:
\$<(?:(?!\$<|>\$)[\s\S])*>\$
请参阅demo
这样,您将只匹配最近的边界。
您的正则表达式不匹配,因为您的标记之间不允许>
,并且您正在使用\b
,而您很可能没有单词边界。
如果您不想在输出中获取分隔符,请使用捕获组:
\$<((?:(?!\$<|>\$)[\s\S])*)>\$
^ ^
在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)
答案 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);
}
我想我知道就是这样。