Regex для рядка містить?


114

Що таке регулярний вираз для простої перевірки, чи містить рядок певне слово (наприклад, "Тест")? Я зробив деякий googling, але не можу отримати прямого прикладу такого регексу. Це для сценарію складання, але не має жодного стосунку до будь-якої конкретної мови програмування.

Відповіді:


78

Припускаючи регулярні аромати регулярних виразів у стилі PCRE:

Якщо ви хочете перевірити це як єдине, повне слово , це \bTest\b, з відповідними прапорцями для нечутливості корпусу, якщо потрібно, та роздільниками для вашої мови програмування. \bявляє собою "межу слова", тобто крапку між символами, де слово можна вважати початком або кінцем. Наприклад, оскільки пробіли використовуються для розділення слів, межі слова будуть з обох боків пробілу.

Якщо ви хочете перевірити це як частину слова , це просто Test, знову ж таки, з відповідними прапорами на предмет нечутливості. Зауважте, що зазвичай виділені методи "підрядки" в цьому випадку, як правило, швидші, оскільки це видаляє накладні витрати на розбір регексу.


1
" \bявляє собою" межу слова ", тобто те, що розділяє два слова (наприклад, пробіл)." \bне відповідає простору; це твердження, яке збігається між символами (або на початку чи в кінці рядка, у більшості випадків).
страгер

1
@strager: Так, ти маєш рацію - моє пояснення було трохи неточним. Я відредагую.
Майкл Мадсен

117

Просто не закріплюйте свій візерунок:

/Test/

Вищенаведений вираз буде перевіряти наявність буквального рядка "Тест" десь у ньому.


2
Дякую, я не знав, що це так просто! Я напевно цього не бачив у своєму Гуглі. Що ви маєте на увазі, не закріплюючи мою схему?
GurdeepS

7
Ви можете прив’язати шаблон, щоб він відповідав початку або в кінці рядка, наприклад / ^ Test / або / Test $ / відповідно або навіть / ^ Test $ /, щоб точно відповідати. Приклад є товстим, оскільки він не дає ніякої користі для порівняння рівності, але, наприклад, при проведенні перевірки поля форми, регулярний вигляд, як / ^ \ d + $ /, буде відповідати лише у тому випадку, якщо поле містить принаймні одну цифру і нічого, крім числових цифр.
Девід Кларк

-13

Я запізнююсь на кілька років, але чому б це не зробити?

[Tt][Ee][Ss][Tt]

4
Ця відповідь з’явилася в черзі на огляд низької якості, імовірно, тому, що ви не пояснили код. Якщо ви це поясните (у своїй відповіді), ви набагато більше шансів отримати більше відгуків - і запитуючий насправді щось дізнається!
Хлопець з капелюхом

6
Це не дуже узагальнювально - уявіть, якщо слово, яке вам довелося шукати, походить від користувача. Вам доведеться генерувати [Aa]шаблон для кожної літери, і це вийде досить потворно досить швидко.
Platinum Azure
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.