我有以下字符串:
73746174652C313A312C310D
|
- extract the value at this position
我想使用正则表达式提取值 1(字符串末尾的 1)。
所以基本上是一个充当 charAt(index) 的正则表达式。
对于仅支持正则表达式的 3rd 方应用程序,我需要此解决方案。请注意,该应用程序无法访问捕获组,并且不支持否定的lookbehinds。
我有以下字符串:
73746174652C313A312C310D
|
- extract the value at this position
我想使用正则表达式提取值 1(字符串末尾的 1)。
所以基本上是一个充当 charAt(index) 的正则表达式。
对于仅支持正则表达式的 3rd 方应用程序,我需要此解决方案。请注意,该应用程序无法访问捕获组,并且不支持否定的lookbehinds。
在 C# 中:
(?<=^.{21})(.)
在 JS 中:
/.(?=.{2}$)/
第 22 个字符在捕获组 1 中。
/^.{21}(.)/
但是你在哪个系统中需要这个而不是正常的字符串处理?
你可以试试:
(?<=^.{21}).
它不适用于 Javascript,但也许它可以在您的应用程序中运行。
(?<= ... )这意味着:字符串开头前面的单个字符^加上 21 个字符.{21}。所以,最后,它返回第 22 个字符。
取决于你想如何匹配它(从开始的 x 距离或从结束的 x 距离)
/(.).{2}$/倒数第三个(捕获第 1 组)
/^.{21}(.)/第 22 个字符(捕获第 1 组)
//PHP
$str = '73746174652C313A312C310D';
$char = preg_replace('/(.).{2}$/','$1',$str); //3rd from last
preg_match('/(.).{2}$/',$str,$chars); //3rd from last
$char = $chars[1];
preg_match('/^.{21}(.)/',$str,$chars); //22nd character
$char = $chars[1];
//JS
var str = '73746174652C313A312C310D';
var ch = str.replace(/(.).{2}$/,'$1'); //3rd from last
var ch = str.match(/(.).{2}$/)[1]; //3rd from last
var ch = str.match(/^.{21}(.)/)[1]; //22nd character
如果您必须使用First match:工具位的结果,请运行两次:
73746174652C313A312C310D- ^.{21}.= 73746174652C313A312C31
73746174652C313A312C31- .$= 1