2015-02-15 10 views
6

सेमेक में, मैं कैसे जांच सकता हूं कि स्ट्रिंग टोकन किसी अन्य स्ट्रिंग में शामिल है या नहीं?सेमेक स्ट्रिंग टोकन समावेशन चेक

मेरे मामले में, मैं जानना चाहता हूं कि कंपाइलर का नाम स्ट्रिंग "क्लैंग" (उदा। "क्लैंग", "ऐप्पलक्लांग", ...) है। मैं अब तक इतना कर सकता हूं:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 
... 
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") 
... 

मुझे एक अधिक लचीला दृष्टिकोण चाहिए, जैसे एक सबस्ट्रिंग की उपस्थिति की जांच करना। यदि दिए गए स्ट्रिंग या वेरिएबल का मान दिया नियमित अभिव्यक्ति से मेल खाता (regex से मेल खाता)

यह सच है:

यह है कि मैं क्या दस्तावेज में मिल सकता है है।
यदि (कम) सही है यदि दिया गया स्ट्रिंग या चर का मान मान्य संख्या है और दाईं ओर से कम है।
यदि (ग्रेटर) सही है यदि दिया गया स्ट्रिंग या चर का मान मान्य संख्या है और दाईं ओर से अधिक है।
यदि (इक्वाल) सही है तो दिया गया स्ट्रिंग या चर का मान मान्य संख्या है और दाईं ओर उसके बराबर है।
यदि (STRLESS) सही है यदि दिया गया स्ट्रिंग या चर का मान दाईं ओर स्ट्रिंग या चर से लेक्सिकोोग्राफ़िक रूप से कम है।
यदि (STRGREATER) सही है यदि दिया गया स्ट्रिंग या चर का मान स्ट्रिंग या चर के दायरे से अधिक है।
यदि (STREQUAL) सही है यदि दिया गया स्ट्रिंग या चर का मान लेक्सिकोग्राफिक रूप से दाईं ओर स्ट्रिंग या चर के बराबर है।

+0

दृष्टिकोण से एक आप सूचीबद्ध अंतिम जवाब होने वाला है, लेकिन उस टोकन के स्पष्ट उदाहरण के बिना जिसे आप ढूंढ रहे हैं और जिस स्ट्रिंग को आप खोज रहे हैं, कोई भी आपको और अधिक बारीकी से निर्देशित करने में सक्षम नहीं होगा। – kdopen

उत्तर

7

if(<variable|string> MATCHES regex) शायद आप जो खोज रहे हैं वह होगा।

इस विशेष मामले में (यह मानते हुए आप Clang और AppleClang के लिए ब्लॉक के अंदर एक ही बात कर रहे हैं) तो आप की जगह ले सकता:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 
... 
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") 
... 

साथ:

if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$") 
+0

मुझे जो करना है, यह ठीक काम करता है: 'अगर (CMAKE_CXX_COMPILER_ID MATCHES "Clang") ' – Pietro

+0

और प्रारंभिक तब से ऊपरी या लोअरकेस हो सकता है:' यदि (CMAKE_CXX_COMPILER_ID MATCHES" (सी | सी?) लैंग ")' – Pietro

+4

@Pietro ऐसा इसलिए है क्योंकि, हालांकि बुरी तरह से प्रलेखित किया गया है, जब पार्स स्ट्रिंग में खोजी गई स्ट्रिंग * निहित * होती है तो MATCHES सत्य वापस आती है। यह कम से कम मेरा अनुभव है, कई मामलों में परीक्षण किया गया है, लेकिन फिर भी इस पहलू पर दस्तावेज स्पष्ट है। – Antonio

संबंधित मुद्दे