diff --git a/DiscordChatExporter.Core/Exporting/Filtering/ContainsMessageFilter.cs b/DiscordChatExporter.Core/Exporting/Filtering/ContainsMessageFilter.cs index ad47119..6437d20 100644 --- a/DiscordChatExporter.Core/Exporting/Filtering/ContainsMessageFilter.cs +++ b/DiscordChatExporter.Core/Exporting/Filtering/ContainsMessageFilter.cs @@ -10,11 +10,19 @@ internal class ContainsMessageFilter : MessageFilter public ContainsMessageFilter(string text) => _text = text; + // Match content within word boundaries, between spaces, or as the whole input. + // For example, "max" shouldn't match on content "our maximum effort", + // but should match on content "our max effort". + // Also, "(max)" should match on content "our (max) effort", even though + // parentheses are not considered word characters. + // https://github.com/Tyrrrz/DiscordChatExporter/issues/909 private bool IsMatch(string? content) => !string.IsNullOrWhiteSpace(content) && Regex.IsMatch( content, - "\\b" + Regex.Escape(_text) + "\\b", + @"(?=\b|\s|^)" + + Regex.Escape(_text) + + @"(?=\b|\s|$)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant ); diff --git a/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs b/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs index 675cd84..2512ab8 100644 --- a/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs +++ b/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs @@ -70,7 +70,7 @@ internal static class FilterGrammar .Named("has:"); // Make sure that property-based filters like 'has:link' don't prevent text like 'hello' from being parsed. - // https://github.com/Tyrrrz/DiscordChatExporter/issues/909 + // https://github.com/Tyrrrz/DiscordChatExporter/issues/909#issuecomment-1227575455 private static readonly TextParser PrimitiveFilter = Parse.OneOf( FromFilter,