我怎样才能实现类似的解决方案:如何在 PHP 中获取两个字符串之间的子字符串?但在 DART 中
例如我有一个字符串:
String data = "the quick brown fox jumps over the lazy dog"
quick
和 over
data
并期待结果:brown fox jumps
您可以将
String.indexOf
与 String.substring
结合使用:
void main() {
const str = "the quick brown fox jumps over the lazy dog";
const start = "quick";
const end = "over";
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
print(str.substring(startIndex + start.length, endIndex)); // brown fox jumps
}
另请注意,
startIndex
是包含,而endIndex
是排除。
我喜欢带有lookbehind
(?<...)
和lookahead (?=...)
的正则表达式:
void main() {
var re = RegExp(r'(?<=quick)(.*)(?=over)');
String data = "the quick brown fox jumps over the lazy dog";
var match = re.firstMatch(data);
if (match != null) print(match.group(0));
}
final str = 'the quick brown fox jumps over the lazy dog';
final start = 'quick';
final end = 'over';
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end);
final result = str.substring(startIndex + start.length, endIndex).trim();
对于未来的研究人员: 从字符串的开头到特定的符号或字符;
使用比 regExp 更快的 substring 和 indexOf 来做到这一点:
void main() {
const str = "Cars/Horses";
final endIndex = str.indexOf("/", 0);
print(str.substring(0, endIndex)); // Cars
}
这可能会对某人有帮助
您可以借助正则表达式来做到这一点。 创建一个函数,它将返回正则表达式匹配项
Iterable<String> _allStringMatches(String text, RegExp regExp) =>
regExp.allMatches(text).map((m) => m.group(0));
然后将正则表达式定义为
RegExp(r"[quick ]{1}.*[ over]{1}"))
子字符串功能不是那么好,并且对于高于“结束”值的字符串会抛出错误。
为了使其更简单,请使用这个不会引发错误的自定义函数,而不是使用最大长度。
String substring(String original, {required int start, int? end}) {
if (end == null) {
return original.substring(start);
}
if (original.length < end) {
return original.substring(start, original.length);
}
return original.substring(start, end);
}
void main() {
String str = "the quick brown fox jumps over the lazy dog";
String start = "quick";
String end = "over";
print(getSringBetween(str, start, end));
//OUT PUTS: brown fox jumps
}
String getSringBetween(str, start, end) {
return str.split(start).last.split(end)[0].trim();
}