php使用正则表达式标记标题,PHP:使用正则表达式进行标记(主要是那里)

我想标记格式化字符串(非常类似于printf),我想我只是遗漏了一点点:

>%[number] [一个字母ctYymd]将成为一个标记²

> 1美元…… 10美元将成为一个代币

>所有其他(普通文本)成为一个标记.

²update:现在使用#而不是%. (使用Windows命令行参数减少麻烦)

13c402f10068dfcce0c6d82024ecee91.png

如果你专注于通过管道连接的三个部分(作为 – 或者),这并不可怕,所以基本上它只是三个匹配.因为我想从头到尾匹配,所以我把东西包裹在/^…%/中并被一个不匹配的组包围(?:……可能会重复一次或多次:

$exp = '/^(?:(%\\d*[ctYymd]+)|([^$%]+)|(\\$\\d))+$/';

我的来源仍未提供:

$exp = '/^(?:(%\\d*[ctYymd]+)|([^$%]+)|(\\$\\d))+$/';

echo "expression: $exp \n";

$tests = [

'###%04d_Ball0n%02d$1',

'%03d_Ball0n%02x$1%03d_Ball0n%02d$1',

'%3d_Ball0n%02d',

];

foreach ( $tests as $test )

{

echo "teststring: $test\n";

if( preg_match( $exp, $test, $tokens) )

{

array_shift($tokens);

foreach ( $tokens as $token )

echo "\t\t'$token'\n";

}

else

echo "not valid.";

} // foreach

我得到的结果却是:比赛失灵了.第一个%[数字] [字母]从不匹配,因此其他匹配双:

expression: /^((%\d*[ctYymd]+)|([^$%]+)|(\$\d))+$/

teststring: ###%04d_Ball0n%02d$1

'$1'

'%02d'

'_Ball0n'

'$1'

teststring: %03d_Ball0n%02x$1%03d_Ball0n%02d$1

not valid.teststring: %3d_Ball0n%02d

'%02d'

'%02d'

'_Ball0n'

teststring: %d_foobardoo

'_foobardoo'

'%d'

'_foobardoo'

teststring: Ball0n%02dHamburg%d

'%d'

'%d'

'Hamburg'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值