Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Maybe there is a knot in my head, but I would expect that

StringMatchQ["IP1", "IP"]

should return True (which it does not) just as

StringFreeQ["IP1", "IP"]

returns False (which it does). What am I missing?

share|improve this question
1  
If StringFreeQ is to strings as FreeQ is to expressions, then StringMatchQ is to strings as MatchQ, and not as MemberQ, is to expressions –  Rojo Aug 27 '12 at 13:02
add comment

2 Answers

up vote 12 down vote accepted

StringMatchQ tests the pattern, and "IP1" doesn't match the pattern "IP", it does match the pattern ___~~"IP"~~___, but that's a different pattern! Similarly you could write your pattern as StringMatchQ["IP1", "IP*"]

StringFreeQ however doesn't just test the entire string, it tests every substring, so in effect the ___~~pattern~~___ is added by the function itself to your pattern.

share|improve this answer
1  
StringMatchQ["IP1", "*IP*"] is the more appropriate equivalent to StringMatchQ["IP1", ___~~"IP"~~___], no? –  J. M. Aug 27 '12 at 13:18
    
Thanks, that helps a lot. I find it also odd that StringMatchQ["IP1", RegularExpression["IP"]] is False. –  Karsten W. Aug 27 '12 at 13:37
    
@J.M. Yes, I was referring to his pattern in particular, however i suppose that wasn't clearly stated. –  jVincent Aug 27 '12 at 13:55
2  
@KarstenW. RegularExpression["IP"] is an exact "pattern", so you are asking if your string is equal to "IP", in other languages the pattern would be "^IP$". If you want to match anything containing IP, you have to specify the "anything containing" part of the pattern. StringMatchQ["IP1", RegularExpression[".*IP.*"]] is True. –  jVincent Aug 27 '12 at 13:57
    
@Karsten, in short, StringMatchQ[] doesn't implicitly insert wildcards; if you want wildcards, you need to explicitly put them in. –  J. M. Aug 27 '12 at 13:59
add comment

If you like to think in negatives and avoid regular expressions:

!StringFreeQ["IP1", "IP"]

True

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.