Как проверить, является ли String "строкой" или RegEx? - PullRequest
2 голосов
/ 06 октября 2009

Как я могу проверить, является ли String в текстовом поле простой String или RegEx?

Я ищу текстовый файл построчно.

Либо .Contains(Textbox.Text);, либо Regex(Textbox.Text) Match(currentLine)

(я знаю, синтаксис работает не так, просто для презентации)

Теперь моя программа должна автоматически обнаруживаться, если Textbox.Text имеет форму RegEx или является обычной строкой.

Есть предложения? Напишите свой собственный маленький RexEx, чтобы определить, содержит ли Textbox RegEx?

Edit:

Я не смог добавить свои строки может быть очень простым, как Foo руда 0005 Я пробую предложенные решения прямо сейчас!

Ответы [ 4 ]

5 голосов
/ 06 октября 2009

Вы не можете обнаружить регулярные выражения с регулярным выражением, так как сами регулярные выражения не являются регулярными языком .

Однако самое простое, что вы, вероятно, могли бы сделать, это попытаться скомпилировать регулярное выражение из содержимого текстового поля, и, когда это удастся, вы знаете, что это регулярное выражение. Если это не удается, вы знаете, что это не так.

Но это также классифицирует обычные строки, такие как "foo", как регулярное выражение. В зависимости от того, что вам нужно сделать, это может быть или не быть проблемой. Если это строка поиска, то результаты для этого случая идентичны. В случае «foo.bar» они будут отличаться, хотя, поскольку это допустимое регулярное выражение, но оно соответствует другим параметрам, чем сама строка.

Мой совет, также изложенный в другом комментарии, заключается в том, что вы просто всегда включаете поиск регулярных выражений, поскольку различий между путями кода здесь нет. Помимо сомнительного выигрыша в производительности (который вряд ли что-то изменит, если вообще будет много пользы).

3 голосов
/ 06 октября 2009

Одним из возможных решений в зависимости от вашего определения string и regex было бы проверить, содержит ли строка типичные символы регулярного выражения.

Вы могли бы сделать что-то вроде этого:

string s = "I'm not a Regex";

if (s == Regex.Escape(s))
{
   // no regex indeed
}
3 голосов
/ 06 октября 2009

Многие строки могут быть регулярным выражением, каждое регулярное выражение может быть строкой.

Считайте строку "худой". может быть строкой («.» - точка) или регулярным выражением («.» - любой символ).

Я бы просто добавил флажок, где пользователь указывает, вводит ли он регулярное выражение, как обычно во многих приложениях.

0 голосов
/ 06 октября 2009

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

Этот подход только проверяет, является ли оно действительным регулярным выражением, а не предназначено ли оно для него.

Другой подход может состоять в том, чтобы проверить, окружен ли он косыми чертами (т. Е. ‘/ Foo /‘). Регулярные выражения с косыми чертами являются обычной практикой (хотя вы должны удалять косые черты перед подачей в библиотеку регулярных выражений)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...