我正在 public T GetComponent<T>() where T : Component
{
foreach (var c in Components)
{
if (c is T) return (T)c;
}
foreach (var c in componentsToAdd)
{
if (c is T) return (T)c;
}
return null;
}
进行str_replace
string
$search
array
。
$search = array(
" tag_name_item ",
" tag_name_item_category "
);
$replace = array(
" tag_name_item{$suffix} ",
" tag_name_item_category{$suffix} "
);
echo str_replace($search, $replace, $my_really_long_string);
我在$search
和$replace
上添加空格的原因是因为我只想匹配整个单词。正如您从上面的代码中猜到的那样,如果我删除了空格并且我的长字符串是:
...
tag_name_item ...
tag_name_item_category ...
...
然后我会得到像
这样的东西...
tag_name_item_sfx ...
tag_name_item_sfx_category ...
...
这是错误的,因为我想要以下结果:
...
tag_name_item_sfx ...
tag_name_item_category_sfx ...
...
没什么,它有效。但我不喜欢它。看起来很脏,编码不好,效率低下。
我意识到我可以使用\b
修饰符使用正则表达式来做这样的事情,但我对正则表达式并不好,因此我不知道如何preg_replace
。
答案 0 :(得分:1)
使用正则表达式的可能方法/可能如下所示:
$result = preg_replace(
'/\b(tag_name_item(_category)?)\b/',
'$1' . $suffix,
$string
);
工作原理:
\b
:正如你所说的那样是字边界,这是为了确保我们只匹配单词,而不是单词部分(
:我们希望在替换字符串中使用部分匹配(tag_name_index
必须替换为自身+后缀)。这就是我们使用匹配组的原因,因此我们可以参考替换字符串中的匹配tag_name_index
是该字符串的字面匹配。(_category)?
:另一个文字匹配,通过使用?
运算符进行分组并可选。这可确保我们匹配tag_name_item
和tag_name_item_category
)
:第一组的结尾(可选的_category
匹配是第二组)。从本质上讲,这个小组持有我们要替换的整个比赛\b
:字边界再次这些匹配项已替换为'$1' . $suffix
。 $1
是对第一个匹配组的引用(表达式中外括号内的所有内容)。您可以使用$2
引用第二组,但我们现在对该组不感兴趣。
这就是真的所有
所以,你试图以tag_name
开头的所有字符串后缀,根据你的例子判断,可以跟随任意数量的基于蛇的字。一个更通用的正则表达式看起来像这样:
$result = preg_replace(
'/\b(tag_name[a-z_]*)\b/',
'$1' . $suffix,
$string
);
与以前一样,\b
,()
和tag_name
字面值的使用保持不变。改变的是:
[a-z_]*
:这是一个角色类。它匹配字符a-z(a到z),并且下划线为零或更多次(*
)。它与_item
和_item_category
匹配,就像匹配_foo_bar_zar_fefe
一样。这些正则表达式是区分大小写的,如果要匹配tag_name_XYZ
之类的内容,您可能希望使用i
标志(不区分大小写): /\b(tag_name[a-z_]*)\b/i
与以前一样,整个匹配被分组,并在替换字符串中使用,我们添加$suffix
,无论可能是什么
答案 1 :(得分:0)
要避免此问题,您可以使用<Directory Id="TARGETDIR" Name="SourceDir">
<Directory...
仅解析字符串一次并选择最长匹配:
strtr
答案 2 :(得分:0)
此函数使用与单词
匹配的数组元素替换整个单词但不替换子字符串<?PHP
function removePrepositions($text){
$propositions=array('/\b,\b/i','/\bthe\b/i','/\bor\b/i');
if( count($propositions) > 0 ) {
foreach($propositions as $exceptionPhrase) {
$text = preg_replace($exceptionPhrase, '', trim($text));
}
$retval = trim($text);
}
return $retval;
}
?>