标签: substr

截断中文文本

我们的网站是中文的,主页面的一部分显示了其他页面标题的列表,其最大长度被称为'26'(我假设这是使用英文字符计数,如果中文字符是使用英语?).我们用于此的线是:

<?php echo anchor('projects/'.$rs->url_project_title.'/'.$rs->project_id,substr(ucfirst($rs->project_title),0,26),'style="text-decoration:none;"'); ?>

但是,如果标题确实很长,那么代码会截断它,但是最后两个中文字符总是显示为 ,因为我猜它是使用英文版本的单词并分割中文字符(不知何故).也许我在想这个!?

例如....

原版的:
?????????????????????

截断版本:
??????????

您是否可以建议进行修改以启用所需数量的字符而不会产生 ??

php truncate character-encoding substr ucfirst

7
推荐指数
1
解决办法
2576
查看次数

从字符串中提取两个单词之间的子字符串

我有以下字符串:

string = "asflkjsdhlkjsdhglk<body>Iwant\to+extr@ctth!sstr|ng<body>sdgdfsghsghsgh"
Run Code Online (Sandbox Code Playgroud)

我想在两个<body>标签之间提取字符串.我要找的结果是:

substring = "<body>Iwant\to+extr@ctth!sstr|ng<body>"
Run Code Online (Sandbox Code Playgroud)

请注意,两个<body>标记之间的子字符串可以包含字母,数字,标点符号和特殊字符.

有这么简单的方法吗?谢谢!

regex string r substr

7
推荐指数
3
解决办法
4960
查看次数

C++中不区分大小写的标准字符串比较

void
main()
{
    std::string str1 = "abracadabra";
    std::string str2 = "AbRaCaDaBra";

    if (!str1.compare(str2)) {
        cout << "Compares"
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?基本上使上述情况不敏感.相关问题我用Google搜索并在这里

http://msdn.microsoft.com/en-us/library/zkcaxw5y.aspx

有一个不区分大小写的方法String :: Compare(str1,str2,Bool).问题是这与我的工作方式有何关系.

c++ string substr

7
推荐指数
1
解决办法
5万
查看次数

vim脚本中的子串

是否有任何substr()类似的函数来获取vim脚本中的子字符串?如果不是这种任务的最佳替代品或替代品是什么?

vim substring substr

7
推荐指数
3
解决办法
1673
查看次数

使用R识别字符串中连续出现的特定字母段

我想确定下面数据框中的字符串列是否在字符串的前20个字符内至少重复5次字母"V"或"G".

样本数据:

 data = data.frame(class = c('a','b','C'), string =
 c("ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ",
 "AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD",
 "GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER"))
Run Code Online (Sandbox Code Playgroud)

例如,第一行中的字符串在前20个字符位置内具有"VVVVG".类似地,第三行中的字符串具有"VVGGV".

data
#  class                                                  string
#1     a ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ
#2     b      AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD
#3     C       GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER
Run Code Online (Sandbox Code Playgroud)

所需的输出应如下所示:

#   class                                                  string result
# 1     a ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ   TRUE
# 2     b      AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD  FALSE
# 3     C       GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER   TRUE
Run Code Online (Sandbox Code Playgroud)

r substr stringr

6
推荐指数
1
解决办法
195
查看次数

utf-8中std :: string的子串?C++ 11

我需要获取std :: string中前N个字符的子字符串,假定为utf8.我学到了.substr不起作用的艰难方式......正如......期待的那样.

参考:我的字符串可能如下所示:任务:\n \n1亿2千万匹

c++ utf-8 stdstring substr c++11

6
推荐指数
1
解决办法
6901
查看次数

为什么PHP substr()会改变ASCII回车字节?

我打算使用一个长字符串来操作大量的位标志,将结果字符串保存在Redis中.然而,偶然发现了一个php bug(?).包含00001101读取位的字节substr()返回意外值:

$bin = 0b00001101;  // 13 - ASCII Carriage return
$c = substr($bin, 0, 1);    // read this character
printf("Expectation: 00001101, reality: %08b\n", $c); // 00000001
Run Code Online (Sandbox Code Playgroud)

Ideone

substr()二元安全的假设是错误的吗?还试过mb_substr(),将编码设置为8bit完全相同的结果.

php binary-data substr

6
推荐指数
1
解决办法
557
查看次数

为什么 std::string::substr 抛出异常而不是返回空字符串?

一段时间以来,我一直想知道std::stringsubstr(pos, len)方法设计背后的基本原理。这对我来说仍然没有意义,所以我决定请教专家。std::out_of_range如果pos参数超过字符串长度加一,该函数将引发异常。这有时会很不方便(甚至很烦人),但我真正关心的是一致性和最小惊喜原则。事实证明,pos+len子串的“结束”位置允许超过字符串长度加一。一开始就不允许这样做,但在结束时不允许这样做,这对我来说是不一致的。允许它结束我暗示了解释

返回位置处的所有字符 pos <= i < pos+len

但是,那么我希望该函数为pos超过字符串长度的值返回一个空字符串,而不是抛出异常。作为旁注,根据这种解释,允许负值甚至是明智的pos(假设它具有有符号类型)。

这给我留下了以下问题:

  • 你觉得这个设计合乎逻辑吗?明智吗?您是否有令人满意的方法来解决不一致的问题?我能想出的唯一可能的解释是与空终止字符串的兼容性。对于空终止,指定的长度是否超过结尾无关紧要,而超出空字符的开始是内存错误。然而,std::string不是空值终止,而是跟踪字符串的长度。如果这是真正的原因,那么我个人认为这是一个非常糟糕的原因。
  • 在性能方面有优势吗?我真的会很惊讶。
  • 我是否忽略了可用性方面的优势?也许一个标准的习惯用法或用例与其他函数结合使用,比如 find?同样在这里我的印象是返回一个空字符串有可能简化一些代码。
  • 有没有办法改变substr未来的行为?我想不会,因为默默地破坏现有代码肯定比忍受这种扭曲更糟糕......?

c++ string substr

6
推荐指数
1
解决办法
2009
查看次数

使用 substr 附加到字符串是否更快?

我刚刚找到了前面的代码 substr( $str, 0, 0, $prepend )

my $foo = " world!"
substr( $foo, 0, 0, "Hello " );
Run Code Online (Sandbox Code Playgroud)

这比

my $foo = " world!"
$foo = "Hello $foo";
Run Code Online (Sandbox Code Playgroud)

perl benchmarking substr micro-optimization

6
推荐指数
1
解决办法
103
查看次数

在所有多行中将整列替换为新值

我的文件中有以下几行

$ cat test.txt
69|1074330570|1,sip:+121345633210x3Bverstat=TN-Validation-Passed|tel:+12134565534|0
69|1077822111|2,;tel:+2223120011~sip:+2223120051@vzpps.com;|sip:+13123120022@vzpps.com|0
69|1077988012|1,sip:+121510016070x3Bverstat=TN-Validation-Passed|tel:+136965339510x3Bnpd|0
Run Code Online (Sandbox Code Playgroud)

我想用电话号码替换文件中的第三列和第四列,如下所示:

69|1074330570|2134563321|2134565534|0
69|1077822111|2223120011|3123120022|0
69|1077988012|2151001607|3696533951|0
Run Code Online (Sandbox Code Playgroud)

好的部分是所有文件在第三列和第四列中都会有一个“+”。现在困难的部分是,有时我们会得到第一行第三列中注意到的 11 位数字 (121345633210),有时“+”后没有添加“1”。因此,如果加号后面有 1,则排除 1。否则,从“+”号后面开始长度。同样,如果有 11 位数字,只需子串 10。此外,如果有超过 1 个数字(如第 2 行),我只需要选取“+”号后面的第一个数字,例如 2223120011,而不是 2223120051。

我尝试了以下方法

awk -F"|"  'BEGIN {FS="+"}{print substr($3,2,10)}' test.txt
Run Code Online (Sandbox Code Playgroud)

但它为第二行提供了不正确的值,因为它需要在“+”号之后开始。

regex linux awk replace substr

6
推荐指数
2
解决办法
150
查看次数