PHP регулярное выражение, чтобы получить все целые или десятичные из шаблона - PullRequest
2 голосов
/ 08 октября 2019

Цель моего кода - получить весь тейк-профит с целым или десятичным значением. схема записи Takeprofit не будет такой же.

Проблема:

  1. Я хочу $ m [3] [4] или $ m [4] [4]как 1.0870, но я получил только 0870. Я получаю этот результат, когда число начинается с 1.xxxx. Они противоречивы. Я не могу решить
  2. TP ----- 1.0870 и TP = 1.0870 не обнаружены

Мой код:

<?php
$s = 'SS 1.0140 SL 1.0670 TP1 1.0870 TP 1 1.0870 TP 2 1.0870 Takeprofit1 1.0870 Take profit 1 1.0870 TP 1.0870 TP-----1.0870 TP=1.0870 TP1=1.0870 TP Open';

$p = '#\b(TP1|TP 1|TP2|TP 2|TP3|TP 3|TAKE PROFIT 1|TAKE PROFIT 2|TAKE PROFIT 3|TAKEPROFIT 1|TAKEPROFIT 2|TAKEPROFIT 3|TAKEPROFIT\|TP)(.*?)(\bOpen\b|\b(\d+(?:\.\d+)?)\b)\b#i';

preg_match_all($p , $s , $m);

Результат $ m:

Array
(
    [0] => Array
        (
            [0] => TP1 1.0870
            [1] => TP 1 1.0870
            [2] => TP 2 1.0870
            [3] => Take profit 1 1.0870
            [4] => TP 1.0870
            [5] => TP1=1.0870
        )

    [1] => Array
        (
            [0] => TP1
            [1] => TP 1
            [2] => TP 2
            [3] => Take profit 1
            [4] => TP 1
            [5] => TP1
        )

    [2] => Array
        (
            [0] =>  
            [1] =>  
            [2] =>  
            [3] =>  
            [4] => .
            [5] => =
        )

    [3] => Array
        (
            [0] => 1.0870
            [1] => 1.0870
            [2] => 1.0870
            [3] => 1.0870
            [4] => 0870
            [5] => 1.0870
        )

    [4] => Array
        (
            [0] => 1.0870
            [1] => 1.0870
            [2] => 1.0870
            [3] => 1.0870
            [4] => 0870
            [5] => 1.0870
        )

)

1 Ответ

1 голос
/ 08 октября 2019

Вы можете использовать

'~\b(TAKE ?PROFIT ?(?:[1-3]|\|TP)|TP ?(?:[1-3](?!\.\d))?)\b(.*?)\b(Open|(\d+(?:\.\d+)?))\b~i'

См. Демоверсию regex

Подробности

  • \b- граница слова
  • (TAKE ?PROFIT ?(?:[1-3]|\|TP)|TP ?(?:[1-3](?!\.\d))?) - Группа 1 : TAKE, необязательный пробел, PROFIT, необязательный пробел, затем цифра от 1 до 3 или|TP подстрока или TP с дополнительным пробелом после него, за которым необязательно следует 1, 2 или 3, за которыми не следует . и цифра
  • \b - граница слова
  • (.*?) - Группа 2 : любые 0+ символов, кроме символов перевода строки, как можно меньше
  • \b - граница слова
  • (Open|(\d+(?:\.\d+)?)) - Группа 3 : Open или Группа 4 : 1+ цифр с последующей необязательной последовательностью . и 1+ цифр
  • \b - граница слова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...