2011-12-21 3 views
-3

Моя задача состояла в том, чтобы написать регулярное выражение в скрипте java и shell, которое будет проверять все строки, содержащие только одну цифру и любое количество символов, которым предшествует эта цифра или следует за ней.Регулярное выражение в Java Vs регулярное выражение в скрипте оболочки

я написал [a-z]*[0-9]{1}[a-z]* и он работал отлично для Java, но это не совсем работает Shell Script Может кто-нибудь, пожалуйста, помогите мне создать регулярную esxpression встречи мое требование в Shell Script

Редактировать(from comments): Я пробовал с grep, но это не принесло мне полезных результатов. [...] Если строка проверяет, я хочу выполнить определенные операции. Так что я использовал его как

if [$password eq [a-z]*[0-9]{1}[a-z]]; then 
    # "do this" 
else 
    # "do that" 
fi 

Не могли бы вы положили некоторый свет на синтаксических различиях в Java и скрипт, связанный с регулярными выражениями?

+0

Какой язык сценариев? Какая операционная система? – duffymo

+0

Можете ли вы показать код, который вы используете в оболочке? –

+0

Что вы имели в виду под regex в сценарии оболочки? с помощью какого инструмента? Grep? как выглядит ваша оболочка cmd, содержащая регулярное выражение? btw {1} может быть опущен – Kent

ответ

1

Вы не указали, какой инструмент должен оценивать регулярное выражение в среде оболочки. Но большинство инструментов не распознает часть {1}. В любом случае эта часть не нужна, потому что только один [0-9] стоит на одном месте.

Оболочка сценария часть будет выглядеть следующим образом:

if [[ "$var" =~ ^[a-zA-Z]*[0-9][a-zA-Z]*$ ]]; then 
    echo matching 
else 
    echo not matching 
fi 

Основные части:

  • использовать [[ выражение, а не [ один, потому что прежний поддерживает сопоставление с образцом (через ==) и регулярное выражение (через =~)
  • =~, как и большинство библиотек регулярных выражений, вернет true if th e pattern соответствует any часть строки, не обязательно полная строка. Например, [a-z]*[0-9][a-z]* будет соответствовать foo123bar456bla, потому что шаблон соответствует участку 3bar с «нулевыми вхождениями первого [a-z], одним случаем [0-9] и тремя вхождениями второго [a-z]». Поэтому необходимо привязать регулярное выражение к началу и концу строки, используя ^ и $.

В Java:

String var = ...; 
if(var.matches("[a-zA-Z]*[0-9][a-zA-Z]*")) 
    System.out.println("matches"); 

String.matches Здесь неявно соответствует полной строки. Это все немного странно.

+0

Спасибо за ваш ответ –

+0

Спасибо за ваш отзыв ... Я пробовал с grep, но он didnot дал мне полезный результат. В основном я хочу использовать его в инструкции if, и если строка проверяет, я хочу выполнить определенные операции. , поэтому я использовал его как , если [$ password eq [a-z] * [0-9] {1} [a-z]]; затем «сделать это» еще «сделать это» фи могли бы вы поместить некоторый свет на синтаксис дифф в Java и сценарии оболочки, связанные с регулярным выражением –

+0

@omkarsohani: перенесите свой комментарий в самом вопросе, так как это важно для ответа. Люди, которые ищут подобную информацию в будущем, могут не найти другую информацию. –

Смежные вопросы