регулярное выражение для чего-либо кроме пустой строки

Это довольно просто. Обратитесь к документам по кешированию за подробностями, но основная идея такова:

function getSetting($key)
{
    return Cache::remember('setting:' . $key, 3600, function() use($key) {
        return Setting::where('name',$key)->value('val');
    });
}

Вы также можете кэшировать все настройки в одно значение кэша. В зависимости от того, сколько настроек есть и какую пропорцию вы используете в среднем запросе, это может быть или не быть хорошим подходом.

44
задан Dale K 23 October 2019 в 21:32
поделиться

7 ответов

^(?!\s*$).+

будет соответствовать любой строке, содержащей хотя бы один непробельный символ.

Итак,

if (Regex.IsMatch(subjectString, @"^(?!\s*$).+")) {
    // Successful match
} else {
    // Match attempt failed
}

должен сделать это за вас.

^ привязывает поиск к началу строки.

(?! \ S * $) , так называемый отрицательный просмотр вперед, утверждает, что невозможно сопоставить только пробельные символы до конца строки.

. + тогда действительно будет соответствовать. Он будет соответствовать чему угодно (кроме новой строки) до конца строки. Если вы хотите разрешить перевод строки, вам нужно установить параметр RegexOptions.Singleline .


Осталось от предыдущей версии вашего вопроса:

^\s*$

соответствует строкам, которые содержат только пробелы (или являются пустыми).

Полная противоположность:

^\S+$

соответствует только строкам, состоящим только из непробельных символов, минимум один символ.

108
ответ дан 26 November 2019 в 21:39
поделиться

Мы можем также использовать пространство в символьном классе в выражении, подобном одному из них:

(?!^[ ]*$)^\S+$
(?!^[ ]*$)^\S{1,}$
(?!^[ ]{0,}$)^\S{1,}$
(?!^[ ]{0,1}$)^\S{1,}$

в зависимости от языка/разновидности, который мы могли бы использовать.

Демонстрация RegEx

Тест

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?!^[ ]*$)^\S+$";
        string input = @"

            abcd
            ABCD1234
            #$%^&*()_+={}
            abc def
            ABC 123
            ";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

Демонстрация C#

<час>

, Если Вы хотите упростить/изменить/исследовать выражение, оно было объяснено на верхней правой панели regex101.com . Если бы Вы хотели бы, можно также смотреть в эта ссылка , как она соответствовала бы против некоторых демонстрационных исходных данных.

<час>

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

0
ответ дан 26 November 2019 в 21:39
поделиться

Вы также можете использовать:

public static bool IsWhiteSpace(string s) 
{
    return s.Trim().Length == 0;
}
2
ответ дан 26 November 2019 в 21:39
поделиться

Я думаю, что [] {4} может сработать в примере, где вам нужно обнаружить 4 пробела. То же самое с остальными: [] {1} , [] {2} и [] {3} . Если вы хотите вообще обнаружить пустую строку, подойдет ^ [] * $ .

0
ответ дан 26 November 2019 в 21:39
поделиться

В .Net 4.0 можно также вызывать String.IsNullOrWhitespace.

32
ответ дан 26 November 2019 в 21:39
поделиться

Утверждения для этого не нужны. \ S должен работать сам по себе, поскольку он соответствует любым не пробельным символам.

3
ответ дан 26 November 2019 в 21:39
поделиться

Вы можете сделать одно из двух:

  • сопоставить с ^ \ s * $ ; совпадение означает, что строка "пуста"
    • ^ , $ - начало и конец привязки строки соответственно
    • \ s - пробельный символ
    • * - повторение нуля или более из
  • найти \ S ; вхождение означает, что строка НЕ ​​"пуста"
    • \ S - это инвертированная версия \ s (обратите внимание на разницу в регистре)
    • \ S , следовательно, соответствует любому непробельному символу

Ссылки

Связанные вопросы

3
ответ дан 26 November 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: