有人可以建议我如何在php中计算匹配[]或[7]的模式吗?
我需要匹配不同字符串中的特定模式,如下例所示:
Lorem ipsum dolor sit amet, consectetur [] adipiscing elit. Phasellus quis lectus metus, at posuere neque.
和
Lorem ipsum dolor sit amet, consectetur [23] adipiscing elit. Phasellus quis lectus metus, at posuere neque. Sed pharetra nibh [24] eget orci convallis at posuere leo convallis. Sed blandit augue [25] vitae augue scelerisque bibendum. Vivamus sit amet libero turpis, non venenatis urna. In blandit, odio convallis suscipit venenatis, ante ipsum cursus [26] augue.
在第一个示例中,empty []将指示需要匹配模式并替换字符串的单个点。
第二个示例的数字表示多个唯一点,其中字符串需要匹配并替换为唯一内容。
我使用以下代码成功匹配第一个示例:
preg_replace('[]', $replacement, $fulltext);
但是,我不确定如何匹配其他要处理的文本的数字。
答案 0 :(得分:2)
您的解决方案只是用可选数字
进行preg替换preg_replace('/\[\d*\]/', $replacement, $fulltext);
答案 1 :(得分:0)
您不需要preg_replace
。请改用str_replace
。
有关详细说明,请参阅下文。
可能需要注意的是,[]
括号preg_replace('[]', 'foo', 'Lorem ipsum dolor sit amet, consectetur [] adipiscing elit. Phasellus quis lectus metus, at posuere neque.')
在PCRE syntax中具有特殊含义,因为它们表示character classes。这意味着你的模式可能没有做你期望它在这里做的事情。
例如
"fooLfooofoorfooefoomfoo fooifoopfoosfooufoomfoo foodfooofoolfooofoorfoo foosfooifootfoo fooafoomfooefootfoo,foo foocfooofoonfoosfooefoocfootfooefootfooufoorfoo foo[foo]foo fooafoodfooifoopfooifoosfoocfooifoonfoogfoo fooefoolfooifootfoo.foo fooPfoohfooafoosfooefoolfoolfooufoosfoo fooqfooufooifoosfoo foolfooefoocfootfooufoosfoo foomfooefootfooufoosfoo,foo fooafootfoo foopfooofoosfooufooefoorfooefoo foonfooefooqfooufooefoo.foo"
会给你
()
这可能不是你想要的。
这是因为PCRE还需要delimiters封闭模式。这里的括号将被视为分隔符,最后会出现一个空模式。
也可以使用括号样式分隔符,其中开始和结束括号分别是起始和结束分隔符。
{}
,[]
,<>
和preg_replace('/\[\d*\]/', $replacement, $fulltext);
都是有效的支架式分隔符对。
相反,你应该使用
\
这会使用文本的$newText = preg_replace_callback_array(
[
'/\[(23)\]/' => function ($match) {
return 'foo';
},
'/\[(24)\]/' => function ($match) {
return 'bar';
},
],
$fulltext
);
反斜杠字符转义括号,并提供一个可选的数字字符数,使其符合模式匹配表达式。
如果您希望替换字符串落在括号内,而不是替换实际的括号,可以将图案用圆括号括起来,并使用back references进行替换。
如果要将特定模式与特定替换字符串匹配(模式比简单子字符串搜索/替换更复杂),则应使用preg_replace_callback_array
代替。 但是,重要的是要注意此功能仅适用于PHP 7
"Lorem ipsum dolor sit amet, consectetur foo adipiscing elit. Phasellus quis lectus metus, at posuere neque. Sed pharetra nibh bar eget orci convallis at posuere leo convallis. Sed blandit augue [25] vitae augue scelerisque bibendum. Vivamus sit amet libero turpis, non venenatis urna. In blandit, odio convallis suscipit venenatis, ante ipsum cursus [26] augue."
哪会给你类似......
$fulltext = 'Lorem ipsum dolor sit amet, consectetur [23] adipiscing elit. Phasellus quis lectus metus, at posuere neque. Sed pharetra nibh [24] eget orci convallis at posuere leo convallis. Sed blandit augue [25] vitae augue scelerisque bibendum. Vivamus sit amet libero turpis, non venenatis urna. In blandit, odio convallis suscipit venenatis, ante ipsum cursus [26] augue.';
$searchStrings = [
'[23]',
'[24]',
'[25]',
'[26]',
];
$replacements = [
'[foo]',
'[bar]',
'[baz]',
'[quix]',
];
$newText = str_replace($searchStrings, $replacements, $fulltext);
如果您真正需要的是根据子字符串搜索进行替换(这样[23]将被替换为字符串&f;&#39;并且[24]将替换为字符串&#39; bar&#39;等...)然后你不需要正则表达式。相反,您可以使用str_replace
。
这是一个例子......
"Lorem ipsum dolor sit amet, consectetur [foo] adipiscing elit. Phasellus quis lectus metus, at posuere neque. Sed pharetra nibh [bar] eget orci convallis at posuere leo convallis. Sed blandit augue [baz] vitae augue scelerisque bibendum. Vivamus sit amet libero turpis, non venenatis urna. In blandit, odio convallis suscipit venenatis, ante ipsum cursus [quix] augue."
哪个给你
class A{
MyClass* m;
vector<MyClass*> vm;
vector<vector<MyClass> > vvm;
pair<int,MyClass*> pim;
};