让我们说我希望在一些针头char之后返回所有字符'x':
$source_str = "Tuex helo babe".
通常我会这样做:
if( ($x_pos = strpos($source_str, 'x')) !== FALSE )
$source_str = substr($source_str, $x_pos + 1);
Run Code Online (Sandbox Code Playgroud)
你知道更好/更聪明(更优雅的方式)吗?
不使用regexp不会使它更优雅,也可能更慢.
不幸的是我们做不到:
$source_str = substr(source_str, strpos(source_str, 'x') + 1);
Run Code Online (Sandbox Code Playgroud)
因为什么时候'x'找不到strpos返回FALSE(而不是-1像JS那样).
FALSE将评估为零,并且第一个字符将始终被切断.
谢谢,
我可以问一下string对象slice()和substr()JavaScript 之间的区别是什么?
关于如何在每个第3个角色中添加破折号我遇到了问题.例如,我想要
ABCDEF turn into ABC-DEF
Run Code Online (Sandbox Code Playgroud)
我有这个代码:
$string = 'ABCDEF';
echo substr_replace(chunk_split($string,3),'-','3','2');
// the output is ABC-DEF
Run Code Online (Sandbox Code Playgroud)
但是,如果我向$ string变量添加更多字符,则此代码不起作用ABCDEFGHI.如果我使用上面的代码,输出将是:
ABC-DEF GHI
Run Code Online (Sandbox Code Playgroud) 我在变量中有以下字符串.
Stack Overflow is as frictionless and painless to use as we could make it.
我想从上面的行中获取前28个字符,所以通常如果我使用substr然后它会给我Stack Overflow is as frictio这个输出,但我想输出为:
Stack Overflow is as...
PHP中是否有任何预制函数可以这样做,或者请在PHP中为我提供此代码?
编辑:
我想要从字符串中总共28个字符而不会破坏一个单词,如果它会让我少于28个字符而不会破坏一个单词,那很好.
我想将一个字符串修剪为指定的长度.如果字符串较短,我不想做任何事情.我发现了一个函数substr()来完成这项工作.但是,Oracle文档中没有任何内容,如果字符串比最大长度更短,会发生什么.
例如:
select substr('abc',1,5) from dual;
Run Code Online (Sandbox Code Playgroud)
返回'abc',这就是我需要的.
我想问一下这是否安全,因为函数似乎没有为此用法定义.有没有更好的方法来截断?
我想从表的字符串列中提取一个单词.
description
===========================
abc order_id: 2 xxxx yyy aa
mmm order_id: 3 nn kk yw
Run Code Online (Sandbox Code Playgroud)
预期结果集
order_id
===========================
2
3
Run Code Online (Sandbox Code Playgroud)
表最多有100行,文本长度为~256个字符,列总是有一个order_id存在.因此,性能不是问题.
在Oracle中,我可以使用REGEXP_SUBSTR此问题.我如何在MySQL中解决这个问题?
编辑1
我正在使用LOCATE和SUBSTR来解决问题.代码很难看.编写代码十分钟后,我正在诅咒编写如此丑陋代码的人.
我没有在MySQL文档中找到REGEXP_SUBSTR函数.但我希望它存在..
回答:为什么不能优化表格?为什么数据以这种愚蠢的方式存储?
我给出的例子只是表示我试图解决的问题.在实际情况中,我使用基于数据库的第三方排队软件来执行异步任务.队列将Ruby对象序列化为文本.我无法控制表结构或数据格式.队列中的任务可以重复出现.在我们的测试设置中,由于过时的数据,一些重复的任务失败了.我必须删除这些任务以防止错误.这种错误并不常见,因此我不想维护规范化的影子表.
我正在寻找一个Pascal等价物(例如)php的substr函数,它的工作原理如下:
$new_string = substr('abcdef', 1, 3); // returns 'bcd'
Run Code Online (Sandbox Code Playgroud)
我已经找到了它,但我总是花费太长时间才这样做,所以我发布了像我这样的其他人的答案,以便能够轻松找到它.
我有一个文件如下:
2300
10 1112221234 111222123420231121PPPPD10+0000000850 ESIM
10 3334446789 333444678920231121PPPPD11+0000000950 RSIM
23
Run Code Online (Sandbox Code Playgroud)
我希望结果如下:
2300
10 1112222345 111222234520231121PPPPD10+0000000850 ESIM
10 3334447890 333444789020231121PPPPD11+0000000950 RSIM
23
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码,并能够替换第二列中的最后 4 位数字和第三列中日期之前的最后 4 位数字。但它还删除了第三列中从第 11 位开始的多余空格以及字母/数字,并得到以下结果:
2300
10 1112222345 1112222345 ESIM
10 3334447890 3334447890 RSIM
23
awk '
BEGIN { FS=OFS=" " }
{if(length($2)>9 && length($3)>9)
{$2 = substr($2,-10)
$3 = substr($3,1,10)
for (i=2;i<=3;i++) {
str = substr($i, 1, length($i) - 4)
for (j = length($i) - 3; j <= length($i); j++) {
str = str (substr($i, …Run Code Online (Sandbox Code Playgroud) 我有一个字符串'aabaacaba'.从左边开始,我试图得到所有大小> = 2的子串,后面会出现在字符串中.例如,aa再次出现在字符串中,情况也是如此ab.
我写了以下正则表达式代码:
re.findall(r'([a-z]{2,})(?:[a-z]*)(?:\1)', 'aabaacaba')
Run Code Online (Sandbox Code Playgroud)
我得到['aa']作为答案.正则表达式错过了ab模式.我认为这是因为人物重叠.请建议一个解决方案,以便修复表达式.谢谢.
我不确定这是否是定义的行为.我有以下代码:
use strict;
use warnings;
use Data::Dumper;
my $string = 'aaaaaa0aaaa';
my $char = substr($string, length($string), 1);
my $char2 = substr($string, length($string)+1, 1);
print Dumper($char);
print Dumper($char2);
Run Code Online (Sandbox Code Playgroud)
除了收到关于substr()字符串结尾的一个警告之外,我对输出感到困惑:
$VAR1 = '';
$VAR1 = undef;
Run Code Online (Sandbox Code Playgroud)
Perldoc说substr:
substr EXPR,OFFSET,LENGTH
如果OFFSET和LENGTH指定部分位于字符串外部的子字符串,则仅返回字符串中的部分.如果子字符串超出字符串的任何一端,则substr()返回未定义的值并产生警告.
双方length($string)并length($string) + 1超出字符串的(零索引)结束,所以我不知道为什么substr在一种情况下,返回空字符串undef中的其他.它是否与C用于字符串终止的NULL字符有关,并且substr在第一种情况下以某种方式返回,因此该字符串有一个"不可见"的最后一个字符,不计入length?我错过了一些明显的东西吗?