我有2个字符串表示A和B.现在这两个字符串中的任何一个都可以是另一个字符串。例如:
Case:1-- A = "abcdef" and B = "abc" //String B is Substring of A.
或
Case:2-- A = "xyz" and B = "wxyza" // String A is Substring of B.
现在我了解索引功能
index($substr, $str)
但我不知道哪一个是另一个的子串,所以无法传递参数。
我是使用
OR
完成的,我通过交换变量来检查这两种情况。
我只需知道其中一个字符串是另一个字符串。 但我需要更好的技术才能这样做? 提前谢谢!
答案 0 :(得分:3)
@zdim一个声明
自己解决,
print length($s1) > length($s2)
? "s2 is @{[ index($s1,$s2) <0 && 'NOT ']}substr of s1"
: "s1 is @{[ index($s2,$s1) <0 && 'NOT ']}substr of s2";
答案 1 :(得分:1)
以下是提交该对并获取包围另一个的字符串的简单方法,或rc*
。
undef
这是一种将字符串排序为($enclosing) = grep { /$s2/ && /$s1/ } ($s1, $s2);
或获取空列表
($inside, $enclosing)
这首先通过双向正则表达式过滤掉不匹配的情况,并通过一个空列表。
在这两种情况下,相同的词语都没有以任何方式标记,我看不出它们是怎样的。
但是,它们确实相互包含,并且可能以相同的方式进一步处理。
此答案中唯一提供的解决方案是下面的@sorted = sort { "$b$a" =~ /^$b.*$b/ <=> "$a$b" =~ /^$a.*$a/ }
grep { $s1 =~ /$s2/ || $s2 =~ /$s1/ } ($s1, $s2);
,在这种情况下设置为@mask
。
这里的所有代码都在(1,1)
下运行,为简洁起见省略。
最初发布。返回另一个或use warnings
内的单词的副本。
undef
评论澄清说,返回一个代码来区分哪个字符串在另一个内部可能很有用。
($in) = map { /^($s1).*$s1|(^$s2).*$s2/ ? $1 // $2 : () } ("$s1$s2", "$s2$s1");
当($sc) = map { /^($s1).*$s1|(^$s2).*$s2/ ? ($1 && 1) || ($2 && 2) : () }
("$s1$s2", "$s2$s1");
包含$sc
时1
为$s1
,$s2
2
时$s2
为$s1
,或者undef
否则。
根据使用方式的不同,上述内容可能很有用
@mask = map { /^($s1.*$s1)|(^$s2.*$s2)/ ? 1 : 0 } ("$s1$s2", "$s2$s1");
@mask
(bool, bool)
有($s1, $s2)
字是否在另一个内。
是:(1,1)
(相等),(1,0)
或(0,1)
(另一方为$s1
或$s2
)或(0,0)
(不同)。
答案 2 :(得分:1)
如果您确定其中一个字符串是另一个字符串,则可以使用以下内容:
if (object[0] is Class1) { ... }
if (object[1] is Class2) { ... }
其中1表示$ sb是$ sa的substr,-1表示$ sa是$ sb的substr。