Как слить эту замену preg? php [duplicate]

Что для меня работало, так это создать модель представления, содержащую свойство date в виде строки. Присвоение свойства DateTime из модели домена и вызов .ToString () в свойстве date при назначении значения в viewmodel.

Результат JSON из метода действия MVC вернет дату в формате, совместимом с представлением.

Просмотреть модель

  public class TransactionsViewModel {public string DateInitiated {get;  задавать;  } public string DateCompleted {get;  задавать;  }}  

Модель домена

  public class Transaction {public DateTime?  DateInitiated {get;  set;} public DateTime?  DateCompleted {get;  set;}}  

Метод действия контроллера

  public JsonResult GetTransactions () {var transaction = _transactionsRepository.All;  var model = new List & lt; TransactionsViewModel & gt; ();  foreach (транзакция var в транзакциях) {var item = new TransactionsViewModel {............... DateInitiated = transaction.DateInitiated.ToString (), DateCompleted = transaction.DateCompleted.ToString (),}  ;  model.Add (пункт);  } return Json (модель, JsonRequestBehavior.AllowGet);  }  
32
задан Craig Walker 27 October 2008 в 21:32
поделиться

6 ответов

(\d+)\s+(\(.*?\))?\s?Z

Обратите внимание на скошенные скобки, а? (ноль или один раз). Любая из групп, которые вы не хотите захватывать, может быть (?: Группы без захвата).

Я согласен с пробелами. \ s - лучший вариант. Я также изменил квантификатор, чтобы обеспечить наличие цифр в начале. Что касается новых строк, это будет зависеть от контекста: если файл анализируется по строкам, это не будет проблемой. Другим вариантом является привязка начала и конца строки (добавьте a ^ вперед и $ в конце).

48
ответ дан Godeke 17 August 2018 в 09:30
поделиться
  • 1
    Пространства являются статическими. Замените их \ s + – Markus Jarderot 27 October 2008 в 21:54
  • 2
    или разместить один из них внутри ()? – Markus Jarderot 27 October 2008 в 21:55
  • 3
    Заметим, что если regex захватывает\n с. или если в одной строке есть несколько экземпляров, это должно быть не жадным: (\ d *) ((. *?))? Z – eyelidlessness 27 October 2008 в 21:56

Вот пример проверки подлинности электронной почты, чтобы получить наиболее значимую часть текста, используя ()?

'email@com.ua'.match(/[a-z-_.]+(@([a-z]+(\.([a-z]+)?)?)?)?/g) # => ['email@com.ua']

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

// ['eamil@com.ua']
// ['email@com.']
// ['email@com']
// ['email@']
// ['email']
0
ответ дан Alex P 17 August 2018 в 09:30
поделиться

Попробуйте следующее:

X (\(Y\))? Z
2
ответ дан Kip 17 August 2018 в 09:30
поделиться

Вы можете сделать это:

([0-9]+) (\([^)]+\))? Z

Однако это не будет работать с вложенными парами для Y. Вложенность требует рекурсии, которая не является строго регулярной (но не контекстной). Современные regexp-двигатели все еще могут справиться с этим, хотя и с некоторыми трудностями (обратные ссылки).

7
ответ дан Konrad Rudolph 17 August 2018 в 09:30
поделиться
  • 1
    К счастью, я не думаю, что мне нужно обрабатывать вложенные парнеры. – Craig Walker 27 October 2008 в 21:51

Если все, что вам нужно для захвата, это число, и число появляется в начале строки, вы можете просто использовать gg] jQuery для PHP типа , чтобы сделать эту тяжелую работу очень быстро и чрезвычайно эффективно:

$value = "10 Z";
$value = "20 (foo) Z";
$value = "30 (bar) Z";
$value = "Cheese";
$value = "   40 (flat) Z";
$value = "22(456)";

$X = (int)trim($value); 

Выходы:

$ x = 10 $ x = 20 $ x = 30 $ x = 0 $ x = 40 $ x = 22

0
ответ дан Martin 17 August 2018 в 09:30
поделиться

Это должно работать:

^\d+\s?(\([^\)]+\)\s?)?Z$

Не проверял его, но позвольте мне дать вам разбивку, поэтому, если есть какие-то ошибки, они должны быть довольно просто найти:

Сначала начало:

^ = beginning of string
\d+ = one or more decimal characters
\s? = one optional whitespace

Затем эта часть:

(\([^\)]+\)\s?)?

На самом деле:

(.............)?

Что делает следующее содержимое необязательно, только если оно существует полностью

\([^\)]+\)\s?

\( = an opening bracket
[^\)]+ = a series of at least one character that is not a closing bracket
\) = followed by a closing bracket
\s? = followed by one optional whitespace

И конец состоит из

Z$

Где

Z = your constant string
$ = the end of the string
16
ответ дан Martin Kool 17 August 2018 в 09:30
поделиться
Другие вопросы по тегам:

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