match.h (4449B)
1 // 2 // Copyright 2017 The Abseil Authors. 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // https://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 // ----------------------------------------------------------------------------- 17 // File: match.h 18 // ----------------------------------------------------------------------------- 19 // 20 // This file contains simple utilities for performing string matching checks. 21 // All of these function parameters are specified as `absl::string_view`, 22 // meaning that these functions can accept `std::string`, `absl::string_view` or 23 // NUL-terminated C-style strings. 24 // 25 // Examples: 26 // std::string s = "foo"; 27 // absl::string_view sv = "f"; 28 // assert(absl::StrContains(s, sv)); 29 // 30 // Note: The order of parameters in these functions is designed to mimic the 31 // order an equivalent member function would exhibit; 32 // e.g. `s.Contains(x)` ==> `absl::StrContains(s, x). 33 #ifndef ABSL_STRINGS_MATCH_H_ 34 #define ABSL_STRINGS_MATCH_H_ 35 36 #include <cstring> 37 38 #include "absl/strings/string_view.h" 39 40 namespace absl { 41 ABSL_NAMESPACE_BEGIN 42 43 // StrContains() 44 // 45 // Returns whether a given string `haystack` contains the substring `needle`. 46 inline bool StrContains(absl::string_view haystack, 47 absl::string_view needle) noexcept { 48 return haystack.find(needle, 0) != haystack.npos; 49 } 50 51 inline bool StrContains(absl::string_view haystack, char needle) noexcept { 52 return haystack.find(needle) != haystack.npos; 53 } 54 55 // StartsWith() 56 // 57 // Returns whether a given string `text` begins with `prefix`. 58 inline constexpr bool StartsWith(absl::string_view text, 59 absl::string_view prefix) noexcept { 60 if (prefix.empty()) { 61 return true; 62 } 63 if (text.size() < prefix.size()) { 64 return false; 65 } 66 absl::string_view possible_match = text.substr(0, prefix.size()); 67 68 return possible_match == prefix; 69 } 70 71 // EndsWith() 72 // 73 // Returns whether a given string `text` ends with `suffix`. 74 inline constexpr bool EndsWith(absl::string_view text, 75 absl::string_view suffix) noexcept { 76 if (suffix.empty()) { 77 return true; 78 } 79 if (text.size() < suffix.size()) { 80 return false; 81 } 82 absl::string_view possible_match = text.substr(text.size() - suffix.size()); 83 return possible_match == suffix; 84 } 85 // StrContainsIgnoreCase() 86 // 87 // Returns whether a given ASCII string `haystack` contains the ASCII substring 88 // `needle`, ignoring case in the comparison. 89 bool StrContainsIgnoreCase(absl::string_view haystack, 90 absl::string_view needle) noexcept; 91 92 bool StrContainsIgnoreCase(absl::string_view haystack, 93 char needle) noexcept; 94 95 // EqualsIgnoreCase() 96 // 97 // Returns whether given ASCII strings `piece1` and `piece2` are equal, ignoring 98 // case in the comparison. 99 bool EqualsIgnoreCase(absl::string_view piece1, 100 absl::string_view piece2) noexcept; 101 102 // StartsWithIgnoreCase() 103 // 104 // Returns whether a given ASCII string `text` starts with `prefix`, 105 // ignoring case in the comparison. 106 bool StartsWithIgnoreCase(absl::string_view text, 107 absl::string_view prefix) noexcept; 108 109 // EndsWithIgnoreCase() 110 // 111 // Returns whether a given ASCII string `text` ends with `suffix`, ignoring 112 // case in the comparison. 113 bool EndsWithIgnoreCase(absl::string_view text, 114 absl::string_view suffix) noexcept; 115 116 // Yields the longest prefix in common between both input strings. 117 // Pointer-wise, the returned result is a subset of input "a". 118 absl::string_view FindLongestCommonPrefix(absl::string_view a, 119 absl::string_view b); 120 121 // Yields the longest suffix in common between both input strings. 122 // Pointer-wise, the returned result is a subset of input "a". 123 absl::string_view FindLongestCommonSuffix(absl::string_view a, 124 absl::string_view b); 125 126 ABSL_NAMESPACE_END 127 } // namespace absl 128 129 #endif // ABSL_STRINGS_MATCH_H_