1

这是字符串

(代码)

Pivot: 96.75<br />Our preference: Long positions above 96.75 with targets @ 97.8 &amp; 98.25 in extension.<br />Alternative scenario: Below 96.75 look for further downside with 96.35 &amp; 95.9 as targets.<br />Comment the pair has broken above its resistance and should post further advance.<br />

(文本)

“支点:96.75
我们的偏好:在 96.75 上方多头头寸,目标为 97.8 和 98.25。
另一种情况:低于 96.75 寻求进一步下行,目标为 96.35 和 95.9。
评论该货币对已突破阻力位,应进一步上涨。
"



结果应该是

(代码)

<b>Pivot</b>: 96.75<br /><b>Our preference</b>: Long positions above 96.75 with targets @ 97.8 &amp; 98.25 in extension.<br /><b>Alternative scenario</b>: Below 96.75 look for further downside with 96.35 &amp; 95.9 as targets.<br />Comment the pair has broken above its resistance and should post further advance.<br />

(文本)
支点:96.75
我们的偏好:96.75 以上的多头头寸,目标为 97.8 和 98.25。
另一种情况:96.75 下方寻找进一步下行空间,目标为 96.35 和 95.9。
评论该货币对已突破其阻力位,应进一步上涨。



porpuse :
把所有的词都包在:签名前。

我试过这个 regex: ((\A )|(<br />))(?P<G>[^:]*):,但它只适用于 python 环境。我在 PHP 中需要这个:

$pattern = '/((\A)|(<br\s\/>))(?P<G>[^:]*):/';
$description = preg_replace($pattern, '<b>$1</b>', $description);

谢谢。

4

3 回答 3

2

这个 preg_replace 应该可以解决问题:

preg_replace('#(^|<br ?/>)([^:]+):#m','$1<b>$2</b>:',$input)

PHP 小提琴- 运行 (F9)

于 2013-08-13T09:37:05.290 回答
1

我应该首先说 HTML 操作最好使用适当的解析器来完成,例如DOMDocument. 这个特殊的问题很简单,所以正则表达式可以在没有太多花招的情况下工作,但要注意:)

您可以使用环视断言;这使您不必在替换期间恢复相邻的字符串:

echo preg_replace('/(?<=^|<br \/>)[^:]+(?=:)/m', '<b>$0</b>', $str);

演示

首先,look-behind 断言匹配每行的开头或前面的<br />. 然后,匹配除冒号以外的任何字符;前瞻断言确保其后跟一个冒号。

/m修饰符用于^匹配每行的开头,而不是始终\A匹配主题字符串的开头。

于 2013-08-13T09:32:54.547 回答
1

我能想到的最“通用”和最不昂贵的正则表达式方法是:

$parts = explode('<br', $str);//don't include space and `/`, as tags may vary
$formatted = '';
foreach($parts as $part)
{
    $formatted .= preg_replace('/^\s*[\/>]{0,2}\s*([^:]+:)/', '<b>$1</b>',$part).'<br/>';
}
echo $formatted;

或者:

$formatted = array();
foreach($parts as $part)
{
    $formatted[] = preg_replace('/^\s*[\/>]{0,2}\s*([^:]+:)/', '<b>$1</b>',$part);
}
echo implode('<br/>', $formatted);

测试,并将其作为输出

支点: 96.75
我们的偏好: 96.75以上的多头头寸,目标为 97.8 和 98.25 延伸。
另一种情况:低于 96.75 寻求进一步下行,目标为 96.35 和 95.9。
评论该货币对已突破其阻力位,应进一步上涨。

话虽如此,我确实觉得这部分数据很奇怪,而且,如果我是你,我会考虑str_replaceor preg_replace-ing 全部中断PHP_EOL

$str = preg_replace('/\<\s*br\s*\/?\s*\>/i', PHP_EOL, $str);//allow for any form of break tag

然后,您的字符串看起来与我必须解析的数据完全一样,并在此处获得了正则表达式:

$str = preg_replace(...);
$formatted = preg_replace('/^([^:\n\\]++)\s{0,}:((\n(?![^\n:\\]++\s{0,}:)|.)*+)/','<b>$1:</b>$2<br/>', $str);
于 2013-08-13T09:45:09.783 回答