匹配模式的正则表达式
本文关键字:正则表达式 模式 | 更新日期: 2023-09-27 18:07:24
我正在寻找正则表达式搜索模式来查找$<
和>$
中的数据。
string pattern = "'b'$<[^>]*>'$";
不工作
谢谢,
您可以使用调和贪婪令牌:
'$<(?:(?!'$<|>'$)['s'S])*>'$
看到演示
这样,您将只匹配最接近的边界。
您的正则表达式不匹配,因为您不允许在标记之间使用>
,并且您正在使用'b
,您很可能没有单词边界。
如果不希望在输出中获取分隔符,请使用捕获组:
'$<((?:(?!'$<|>'$)['s'S])*)>'$
^ ^
结果将在第一组。
在c#中,你应该考虑在逐字字符串文字表示法(@""
)的帮助下声明所有的regex模式(只要可能),因为你不必担心双反斜杠:
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();
这个模式将完成工作:
(?<='$<).*(?=>'$)
演示:https://regex101.com/r/oY6mO2/1
要在php中找到这个模式你有这个REGEX代码用于找到任何模式,
/$ & lt; (. * ?) $/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);
}
使用本例,您将使用相同的名称替换value在这个变量$ yourcontentinwheroufind
例如,你有一个这样的字符串,它也有相同的命名常量。
**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);
}
我想我知道的就这些了