繁体   English   中英

如何在模式搜索中替换字符串变量

[英]How to substitute a string variable in a pattern search

在TCL中,我试图通过使用正则表达式来进行模式搜索。 它在使用直接模式搜索时有效,但是如果我在模式中使用变量则无法正常工作。

例如:

set str "this is actual string to search the pattern"
set pat "the"

regexp {the} $str val
regexp {$pat} $str val1

puts $val;  # it's working
puts $val1; # it's not working, showing error

如何在模式搜索中替换字符串变量,我什至都用过[...]但它不起作用

在这种情况下,您可以选择

regexp $pat $str val

大括号阻止了替换,因此您将文字字符串“ $ pat”与数据字符串进行了匹配。

如果您在模式中同时包含元字符和变量替换,例如

if {[regexp -nocase \s$name\s\w+\s\w+\s(\d+) $str val val1]} …

您需要在允许另一种替换的同时防止一种替换(反斜杠替换)。 这可以用

if {[regexp -nocase [subst -nobackslashes {\s$name\s\w+\s\w+\s(\d+)}] $str val val1]} …

(该开关可以缩短为-nob ),但是subst可能很棘手。 更容易获得以下权利:

if {[regexp -nocase [format {\s%s\s\w+\s\w+\s(\d+)} $name] $str val val1]} …

请注意,在两种情况下,都使用花括号阻止所有替换,然后使用substformat重写字符串中所需的元素。

在交互式shell中尝试模式是一个好主意,例如

% format {\s%s\s\w+\s\w+\s(\d+)} $name
\sthe\s\w+\s\w+\s(\d+)

这样,在将模式插入regexp并针对数据进行测试之前,可以验证该模式是否正常。

文档: Tcl正则表达式的 formatregexpsubst语法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM