从字符串中删除粗体字符(没有<b>标记)

时间:2019-07-01 17:01:11

标签: php regex

我一直在尝试删除这样的粗体字符:

????? - New song

如您所见,是带有<b>标签的粗体文本。

我曾经尝试过,假设角色可能是一种表情符号,但是我没有任何运气。

$regex_emoticons = '/[\x{1F600}-\x{1F64F}]/u';
$clear_string = preg_replace($regex_emoticons, '', $string);

$regex_symbols = '/[\x{1F300}-\x{1F5FF}]/u';
$clear_string = preg_replace($regex_symbols, '', $clear_string);

$regex_transport = '/[\x{1F680}-\x{1F6FF}]/u';
$clear_string = preg_replace($regex_transport, '', $clear_string);

$regex_misc = '/[\x{2600}-\x{26FF}]/u';
$clear_string = preg_replace($regex_misc, '', $clear_string);

$regex_dingbats = '/[\x{2700}-\x{27BF}]/u';
$clear_string = preg_replace($regex_dingbats, '', $clear_string);

如何将其删除或替换为不带粗体的正确字符? 任何想法都会被感动。

2 个答案:

答案 0 :(得分:4)

这些字符属于Unicode void server::readyRead() { QTcpSocket *m_socket = static_cast<QTcpSocket*>(sender()); while(m_socket->bytesAvailable() > 0) { QByteArray buf = m_socket->readAll(); } switch(buf): case 1: data = collectDatafromStream1(); m_socket->write(data); m_socket->flush(); case 2: data = collectDatafromStream2(); m_socket->write(data); m_socket->flush(); case 3: data = collectDatafromStream3(); m_socket->write(data); m_socket->flush(); //and so on..... } 代码块

Mathematical涵盖范围\p{Block=Mathematical_Alphanumeric_Symbols}

这些字符是类似字体的代码,例如粗体,斜体,脚本,斜体,斜体。

如果您想花一些时间匹配每种类型和范围,可以将它们映射为ASCII等效项。

我只会删除它们。

以下是块范围内的字符(严重缩写)

[\x{1D400}-\x{1D7FF}]

答案 1 :(得分:1)

最初,我认为这将是一个大写/小写问题。您可能会使用想要查找的适当unicode进行跟踪。

  

表达式的一个问题可能是+丢失了。


我的猜测是,也许此表达式可能有效:

([\x{0041}-\x{005A}]+)

如果所有内容都可能是大写,或者某些表达式类似于:

([\x{0041}-\x{005A}]{2,})

如果我们只想替换SONYA而不是S O N Y A

如果您感兴趣,请在此demo中对表达式进行说明。

测试

$re = '/([\x{0041}-\x{005A}]+)/u';
$str = 'SONYA';
$subst = '\\L$1';

$result = preg_replace($re, $subst, $str);
echo $result;

参考

unicode of lower case and upper case letters