tcl中矩形括号中的extrack字符串

时间:2017-11-19 15:40:15

标签: regex tcl

我想在括号之间锁定一个字符串,我想知道什么是最好的方法

我是什么意思

我在文件中有一些行

let largestString;

function findLargestString(strings) {
  let largestString = '';
  strings.forEach((string) => {
    if (string.length > largestString.length) {
      largestString = string;
    }
  });

  return largestString;
}

var arr = new Array('', 'aa', 'test')
console.log(findLargestString(arr));

我需要锁定[307b..3fff] : 00000000000000000; 307b3fff

我尝试使用regexp锁定它,找到括号并将字符串锁定在

00000000000000000

如何锁定括号中的值307b..3fff?

伊塔马尔

4 个答案:

答案 0 :(得分:4)

虽然有使用正则表达式的解决方案,但它们不是解析该字符串的唯一方法。 scan命令也很有用...特别是你将值作为数字而不是以十六进制数字字符串本身

set inputString {[307b..3fff] : 00000000000000000;}

scan $inputString {[%x..%x] : %lx;} v1 v2 v3

puts "$v1->$v2 => $v3"
# Output: 12411->16383 => 0

答案 1 :(得分:1)

我会选择Donal的回答,但是

set inputString {[307b..3fff] : 00000000000000000;}
lassign [regexp -inline -all {[[:xdigit:]]+} $inputString] v1 v2 v3

也有效(fwiw,它也保留十六进制)。

答案 2 :(得分:0)

您可以使用:

drop table if exists mysql.user

Demo

答案 3 :(得分:0)

使用以下解决方案,num1num2num3将保留您需要的值:

set line {[307b..3fff] : 00000000000000000;}
regexp {\[([^][]*)\.\.([^][]*)]\s*:\s*(\d+)} $line - num1 num2 num3 
puts "Number1: $num1\nNumber2: $num2\nNumber3: $num3"

请参阅Tcl online demo

正则表达式匹配:

  • \[ - [
  • ([^][]*) - 第1组(" num1"):除][以外的任何0 +字符
  • \.\. - 两个点
  • ([^][]*) - 第2组(" num2"):除][以外的任何0 +字符
  • ] - ]
  • \s*:\s* - 用0 +空格包围的冒号
  • (\d+) - 第3组(" num3"):1个或多个数字

请参阅regex demo