[英]Regular Expression to match the pattern
我正在寻找正则表达式搜索模式以查找$<
和>$
内的数据。
string pattern = "\b\$<[^>]*>\$";
不管用。
谢谢,
您可以使用脾气暴躁的令牌 :
\$<(?:(?!\$<|>\$)[\s\S])*>\$
观看演示
这样,您将仅匹配最接近的边界。
您的正则表达式不匹配,因为您不允许在标记之间使用>
,并且您正在使用\\b
,而您最可能没有单词边界。
如果不想在输出中获取定界符,请使用捕获组:
\$<((?:(?!\$<|>\$)[\s\S])*)>\$
^ ^
结果将在第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();
要在php中找到此模式,您可以使用此REGEX代码来查找任何模式,
/$<(.*?)>$/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);
}
使用此示例,您将在此变量$ yourcontentin中找到使用相同名称常量内容替换的值
例如,您具有类似这样的字符串,它也具有相同的命名常量。
**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);
}
我想我知道就这些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.