static Vector<pair<int, String> > getRegularExpressionMatchesByLines(const RegularExpression& regex, const String& text) { Vector<pair<int, String> > result; if (text.isEmpty()) return result; int lineNumber = 0; unsigned start = 0; while (start < text.length()) { size_t lineEnd = text.find('\n', start); if (lineEnd == notFound) lineEnd = text.length(); else lineEnd++; String line = text.substring(start, lineEnd - start); if (line.endsWith("\r\n")) line = line.left(line.length() - 2); if (line.endsWith('\n')) line = line.left(line.length() - 1); int matchLength; if (regex.match(line, 0, &matchLength) != -1) result.append(pair<int, String>(lineNumber, line)); start = lineEnd; lineNumber++; } return result; }
bool DOMImplementation::isXMLMIMEType(const String& mimeType) { if (mimeType == "text/xml" || mimeType == "application/xml" || mimeType == "text/xsl") return true; static const char* validChars = "[0-9a-zA-Z_\\-+~!$\\^{}|.%'`#&*]"; // per RFCs: 3023, 2045 static RegularExpression xmlTypeRegExp(DeprecatedString("^") + validChars + "+/" + validChars + "+\\+xml$"); if (xmlTypeRegExp.match(mimeType.deprecatedString()) > -1) return true; return false; }
void replace(String& string, const RegularExpression& target, const String& replacement) { int index = 0; while (index < static_cast<int>(string.length())) { int matchLength; index = target.match(string, index, &matchLength); if (index < 0) break; string.replace(index, matchLength, replacement); index += replacement.length(); if (!matchLength) break; // Avoid infinite loop on 0-length matches, e.g. [a-z]* } }
static int countRegularExpressionMatches(const RegularExpression& regex, const String& content) { int result = 0; int position; unsigned start = 0; int matchLength; while ((position = regex.match(content, start, &matchLength)) != -1) { if (start >= content.length()) break; if (matchLength > 0) ++result; start = position + 1; } return result; }
static Vector<std::pair<int, String>> getRegularExpressionMatchesByLines(const RegularExpression& regex, const String& text) { Vector<std::pair<int, String>> result; if (text.isEmpty()) return result; OwnPtr<Vector<size_t>> endings(lineEndings(text)); size_t size = endings->size(); unsigned start = 0; for (size_t lineNumber = 0; lineNumber < size; ++lineNumber) { size_t lineEnd = endings->at(lineNumber); String line = text.substring(start, lineEnd - start); if (line.endsWith('\r')) line = line.left(line.length() - 1); int matchLength; if (regex.match(line, 0, &matchLength) != -1) result.append(std::pair<int, String>(lineNumber, line)); start = lineEnd + 1; } return result; }
static Vector<std::pair<size_t, String>> getRegularExpressionMatchesByLines(const RegularExpression& regex, const String& text) { Vector<std::pair<size_t, String>> result; if (text.isEmpty()) return result; auto endings = lineEndings(text); size_t size = endings.size(); size_t start = 0; for (size_t lineNumber = 0; lineNumber < size; ++lineNumber) { size_t nextStart = endings[lineNumber]; String line = text.substring(start, nextStart - start); int matchLength; if (regex.match(line, 0, &matchLength) != -1) result.append(std::pair<size_t, String>(lineNumber, line)); start = nextStart; } return result; }