Php preg_match Shell eşdeğer?

6 Cevap php

PHP'nin preg_match bir kabuk eşdeğeri var mı?

Ben bir kabuk bu dizeden veritabanı adını ayıklamak çalışıyorum.

define('DB_NAME', 'somedb');

PHP preg_match kullanarak ben sadece böyle bir şey yapabilirdi.

preg_match('define(\'DB_NAME\','(.*)'\'\)',$matches);
echo $matches[1];

Nasıl bir kabuk içinde aynı şeyi başarabilirsiniz?

6 Cevap

$ t="define('DB_NAME', 'somedb');"
$ echo $t
define('DB_NAME', 'somedb');
$ eval "result=(${t##*,}"
$ echo $result
somedb
$

Yani biri bashism içermiyor ve en out-of-the-box ortamlarda çalışmak olurken, clunkier versiyonunu yapmak, POSIX kabuk özellikleri ile sopa:

t="define('DB_NAME', 'somedb');"
r="${t##*,}"
r="${r%);*}"
r=`eval echo $r`

Nasıl hakkında:

$ str="define('DB_NAME', 'somedb');"
$ php -r "$str echo DB_NAME;"
somedb

Bu ne istediğinizi yapabilir

sed -e "/DB_NAME/ s/define('DB_NAME', '\(.*\)');/\1/" /path/to/file/to/search.txt

böyle bir şey:

MATCHED=$(sed -n "s/^define('DB_NAME', '\(.*\)')/\1/p" file.php)

if [[ -n ${MATCHED} ]];then
  echo $MATCHED
else
  echo "No match found"
fi

Sadece durum / esac yapı kullanabilirsiniz

mystring="define('DB_NAME', 'somedb');"
case $mystring in
    *define*DB_NAME*) 
      dbname=${mystring%\'*}
      dbname=${dname##*\'}
      echo "$dbname" ;;
esac

Tam sorusuna ifade cevap Kullanımı:

expr match "string" "regexp"

Yani, ihtiyacı için, siz yazabilirsiniz:

expr match "$mystring" "define('DB_NAME', '\([^']\+\)');"

Ben İfade olsa, mevcut ortamları altında bilmiyorum.